在何处以及如何实例化inputmap和actionmap

用户名

我正在制作经典的“在屏幕上四处移动图像”程序。我正在尝试使用键盘绑定代替键侦听器,但是到目前为止没有成功。

我的对象在链表中

public LinkedList<GameObject> object = new LinkedList<GameObject>();

并通过添加到此列表中

public void addObject(GameObject object){
    this.object.add(object);
}

我的KeyBinding类如下

public class KeyBindings extends JPanel{

private static final String accelerate = "accelerate";

public KeyBindings(){
    System.out.println("test");
    registerKeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0, false), "UP-press", new ShuttleMove(accelerate));
}

public void registerKeyBinding(KeyStroke keyStroke, String name, Action action) {
    InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
    ActionMap am = getActionMap();

    im.put(keyStroke, name);
    am.put(name, action);
}

class ShuttleMove extends AbstractAction {

    public ShuttleMove(String movement) {

            if (movement.equals("accelerate")){
                //this.setVelocityForward(this.getVelocityForward() + 0.1);
                System.out.println("accelerate");
            }
    }
    public void actionPerformed(ActionEvent e) {
    }
}

}

我的Player类(扩展了GameObject类)看起来(略有浓缩)为:

public class Player extends GameObject {

Handler handler;

public Player(int x, int y, ID id, int width, int height, int rotation,double totalRotation, Handler handler, double velocityForward, double velocityRotate){
    super(x, y, id, width, height, rotation, totalRotation);
    this.handler = handler;

}

public void tick(){ 
    x += this.getVelocityForward();
    y += this.getVelocityForward();
}
public void render(Graphics2D g2d){

    try {
        player = ImageIO.read(new File("src/Game/images/shuttle3.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }

    AffineTransform old = g2d.getTransform();
    AffineTransform at = AffineTransform.getTranslateInstance(x,y);     

    g2d.drawImage(player, at,null);
    g2d.setTransform(old);
}
}

我不确定如何“激活”键绑定。应该在主循环中吗?是否应该在player.tick方法中调用该方法来更新播放器图像并随后绘制它?

另外,inputmap和actionmap如何与玩家对象关联?我尝试做类似的事情,但是没有用:

public void registerKeyBinding(KeyStroke keyStroke, String name, Action action) {
    for (int i = 0; i < handler.object.size(); i++){
        GameObject player = handler.object.get(i);
        //find player
        if (player.getID() == ID.Player){
            InputMap im = player.getInputMap(WHEN_IN_FOCUSED_WINDOW);
            ActionMap am = player.getActionMap();

            im.put(keyStroke, name);
            am.put(name, action);
        }
    }
}

我认为应该将播放器强制转换为JComponent,但我不确定如何完成(如Eclipse告诉我它与GameObject类不兼容)。谁能指导我正确的方向?如果我不小心遗漏了一些重要信息,请告诉我(我确信我确实做到了)

皮特·威尔金(Piotr Wilkin)

您不需要“激活”键绑定,一旦填充,它就已经被激活ActionMap什么你需要做的是落实的actionPerfomed方法Action的对象。Action对象本质上是一个动作处理程序一旦创建,它就不应执行任何操作,而应仅在实际执行操作后才执行操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在何处以及如何修改被排除的内容?

来自分类Dev

在何处以及如何修改被排除的内容?

来自分类Dev

在Web应用程序中的何处以及如何存储和检索图像?

来自分类Dev

多个Favicon尺寸,如何,在何处以及何时使用?

来自分类Dev

自定义错误处理程序函数中的error_level和error_message来自何处以及如何出现?

来自分类Dev

可执行文件在何处以及如何在菜单中显示它们?

来自分类Dev

在何处以及如何设置Vary:用户代理HTTP标头

来自分类Dev

如果使用多个包,则在何处以及如何定义泛型函数

来自分类Dev

您如何确定网页从何处以及何时绘制数据?

来自分类Dev

在何处以及如何在配置文件中将--force选项传递给Chocolatey?

来自分类Dev

来自ColdFusion,在何处以及如何在PHP中设置会话变量

来自分类Dev

可执行文件在何处以及如何在菜单中显示它们?

来自分类Dev

Rails:放置在何处以及如何调用计划的清理方法

来自分类Dev

scss文件中的变量来自何处以及如何设置它们

来自分类Dev

在根启动器主题中的何处以及如何添加/编辑CSS

来自分类Dev

Android:在何处以及如何自动刷新列表视图(我具有刷新功能)

来自分类Dev

在导航控制器中实现滑出菜单时,在何处以及如何设置协议委托?

来自分类Dev

NFS服务器及其客户端在何处以及如何运行?

来自分类Dev

在 Linux 堆栈中,以太网标头在何处以及如何添加/删除?

来自分类Dev

WCF如何处理实例化和并发?

来自分类Dev

在FPS中如何以及在何处实例化项目符号。统一

来自分类Dev

在基于浏览器的应用程序中将JWT保存到何处以及如何使用它

来自分类Dev

Rails-在何处以及如何为Active Record模型设置值-控制器还是模型?

来自分类Dev

spring-boot-starter-web中默认的JSON错误响应来自何处以及如何进行调整?

来自分类Dev

从何处以及如何正确使用Firebase中的enablePersistence()方法以离线使用Web应用程序?

来自分类Dev

是否有人知道此权限来自何处以及如何在Android中以编程方式授予此权限?

来自分类Dev

在何处以及如何添加计数器,并使用它来增加附加列表项的innerText-DOM

来自分类Dev

Anaconda:在何处以及如何安装非分发软件包以支持flask-wtf conda配方?

来自分类Dev

JavaFX InputMap/ActionMap 等价物?

Related 相关文章

  1. 1

    在何处以及如何修改被排除的内容?

  2. 2

    在何处以及如何修改被排除的内容?

  3. 3

    在Web应用程序中的何处以及如何存储和检索图像?

  4. 4

    多个Favicon尺寸,如何,在何处以及何时使用?

  5. 5

    自定义错误处理程序函数中的error_level和error_message来自何处以及如何出现?

  6. 6

    可执行文件在何处以及如何在菜单中显示它们?

  7. 7

    在何处以及如何设置Vary:用户代理HTTP标头

  8. 8

    如果使用多个包,则在何处以及如何定义泛型函数

  9. 9

    您如何确定网页从何处以及何时绘制数据?

  10. 10

    在何处以及如何在配置文件中将--force选项传递给Chocolatey?

  11. 11

    来自ColdFusion,在何处以及如何在PHP中设置会话变量

  12. 12

    可执行文件在何处以及如何在菜单中显示它们?

  13. 13

    Rails:放置在何处以及如何调用计划的清理方法

  14. 14

    scss文件中的变量来自何处以及如何设置它们

  15. 15

    在根启动器主题中的何处以及如何添加/编辑CSS

  16. 16

    Android:在何处以及如何自动刷新列表视图(我具有刷新功能)

  17. 17

    在导航控制器中实现滑出菜单时,在何处以及如何设置协议委托?

  18. 18

    NFS服务器及其客户端在何处以及如何运行?

  19. 19

    在 Linux 堆栈中,以太网标头在何处以及如何添加/删除?

  20. 20

    WCF如何处理实例化和并发?

  21. 21

    在FPS中如何以及在何处实例化项目符号。统一

  22. 22

    在基于浏览器的应用程序中将JWT保存到何处以及如何使用它

  23. 23

    Rails-在何处以及如何为Active Record模型设置值-控制器还是模型?

  24. 24

    spring-boot-starter-web中默认的JSON错误响应来自何处以及如何进行调整?

  25. 25

    从何处以及如何正确使用Firebase中的enablePersistence()方法以离线使用Web应用程序?

  26. 26

    是否有人知道此权限来自何处以及如何在Android中以编程方式授予此权限?

  27. 27

    在何处以及如何添加计数器,并使用它来增加附加列表项的innerText-DOM

  28. 28

    Anaconda:在何处以及如何安装非分发软件包以支持flask-wtf conda配方?

  29. 29

    JavaFX InputMap/ActionMap 等价物?

热门标签

归档