Diagonal movement of a sprite

后端 未结 2 1500
太阳男子
太阳男子 2021-01-17 00:15

How can I implement diagonal movement to a sprite? I created a movable sprite (a rectangle), which moves in four directions.

To animate the rectangle, a timer objec

相关标签:
2条回答
  • 2021-01-17 00:39

    Here is code based on your last comments:

    // Set of currently pressed keys
    private final Set<Integer> pressed = new TreeSet<Integer>();
    
    @Override
    public void keyPressed(KeyEvent arg0) {
        int c = arg0.getKeyCode();
        pressed.add(c);
        if (pressed.size() > 1) {
            Integer[] array = pressed.toArray(new Integer[] {});
            if (array[0] == KeyEvent.VK_LEFT && array[1] == KeyEvent.VK_UP) {
                velx = -4;
                vely = -4;
            } else if (array[0] == KeyEvent.VK_UP && array[1] == KeyEvent.VK_RIGHT) {
                velx = 4;
                vely = 4;
            } else if (array[0] == KeyEvent.VK_RIGHT && array[1] == KeyEvent.VK_DOWN) {
                velx = 4;
                vely = -4;
            } else if (array[0] == KeyEvent.VK_LEFT && array[1] == KeyEvent.VK_DOWN) {
                velx = -4;
                vely = 4;
            }
        } else {
            if (c == KeyEvent.VK_LEFT) {
                velx = -4;
                vely = 0;
            } else if (c == KeyEvent.VK_RIGHT) {
                velx = 4;
                vely = 0;
            } else if (c == KeyEvent.VK_UP) {
                velx = 0;
                vely = -4;
            } else if (c == KeyEvent.VK_DOWN) {
                velx = 0;
                vely = 4;
            }
        }
    
    }
    
    @Override
    public void keyReleased(KeyEvent arg0) {
        velx = 0;
        vely = 0;
    
        pressed.remove(Integer.valueOf(arg0.getKeyCode()));
    }
    
    0 讨论(0)
  • 2021-01-17 00:44

    Don't use a KeyListener. Swing was designed to be used with Key Bindings.

    Check out Motion Using the Keyboard for more information and a complete solution that uses Key Bindings.

    0 讨论(0)
提交回复
热议问题