步行和射击不对角线工作

时间:2017-08-01 15:08:39

标签: java

Hy,我有一个管理输入游戏的问题

我将在8个方向上实现所有8个动作+射击,现在我可以在8个方向上移动,在8个方向上射击但是静止,并且在北,南,东,西和东北移动和射击。

我有5个易失性布尔值(问题没有变化而没有易失性)

DESC

当使用键绑定按下箭头键时设置为true,否则设置为

private volatile boolean north;
private volatile boolean east;
private volatile boolean south;
private volatile boolean west;
private volatile boolean shoot;

在线程中控制布尔变量以实现对角运动

    private void setKeyBindings() {

    InputMap inMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    ActionMap actMap = getActionMap();


         inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0, false), "UP" + "pressed");
         inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0, true), "UP" + "released");

        actMap.put( "UP" + "pressed", new AbstractAction() {

        private static final long serialVersionUID = 1L;

        @Override
        public void actionPerformed(ActionEvent e) {
            //directionMap.put(direction, true);
            north=true;
        }

    });
    actMap.put("UP" + "released", new AbstractAction() {

        private static final long serialVersionUID = 1L;

        @Override
        public void actionPerformed(ActionEvent e) {
            //directionMap.put(direction, false);
            north=false;
        }
    });


     inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, false), "DOWN" + "pressed");
     inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, true), "DOWN" + "released");

    actMap.put( "DOWN" + "pressed", new AbstractAction() {

   private static final long serialVersionUID = 1L;

   @Override
   public void actionPerformed(ActionEvent e) {
       //directionMap.put(direction, true);
    south=true;
   }

});
actMap.put("DOWN" + "released", new AbstractAction() {

   private static final long serialVersionUID = 1L;

   @Override
   public void actionPerformed(ActionEvent e) {
       //directionMap.put(direction, false);
    south=false;
   }
});

inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0, false), "LEFT" + "pressed");
inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0, true), "LEFT" + "released");

actMap.put( "LEFT" + "pressed", new AbstractAction() {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
   //directionMap.put(direction, true);
    west=true;
}

});
actMap.put("LEFT" + "released", new AbstractAction() {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
   //directionMap.put(direction, false);
    west=false;
}
});

inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0, false), "RIGHT" + "pressed");
inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0, true), "RIGHT" + "released");

actMap.put( "RIGHT" + "pressed", new AbstractAction() {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
 //directionMap.put(direction, true);
    east=true;
}

});
actMap.put("RIGHT" + "released", new AbstractAction() {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
 //directionMap.put(direction, false);
    east=false;
}
});



inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, false), "SPACE" + "pressed");
inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true), "SPACE" + "released");

actMap.put( "SPACE" + "pressed", new AbstractAction() {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
 //directionMap.put(direction, true);
    shoot=true;
}

});
actMap.put("SPACE" + "released", new AbstractAction() {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
 //directionMap.put(direction, false);
    shoot=false;
}
});




inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_X, 0, false), "SUCCESSIVA" + "pressed");

actMap.put( "SUCCESSIVA" + "pressed", new AbstractAction() {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
 //directionMap.put(direction, true);
    mondo.player.selectArmaSuccessiva();
}

});



inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0, false), "PRECEDENTE" + "pressed");

actMap.put( "PRECEDENTE" + "pressed", new AbstractAction() {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
//directionMap.put(direction, true);
        mondo.player.selectArmaPrecedente();
}

});

}

当我移动时它只能运作良好,  但是当我拍摄时它只适用于北,南,东,西和东北。 为什么只有东北? 如果我停止方向,任何对角线的球员和射击射击,  好像当我移动对角线拍摄变得虚假时

0 个答案:

没有答案