如何对角移动可见图像?

Gre*_*den 6 java applet gif active-objects diagonal

我一直试图弄清楚如何在applet窗口中对角线移动可见图像.

如果按向上,向下,向左或向右按​​下图像(gif)会相应移动,但是如果您尝试同时按下两个键(例如同时向上和向右),图像只会按您按下的方向移动第二(即使你同时按下按键仍有微观延迟).

可能有一种简单的方法可以解决这个问题,我只是不知道,或者某个人已经想到了解决方法......我感谢任何帮助或建议.

谢谢

英雄级(这个类定义了"英雄"是什么;在这种情况下是一个简单的像素人,他能做什么)

import objectdraw.*;
import java.awt.*;

public class Hero extends ActiveObject {

private DrawingCanvas canvas;
private VisibleImage player;

public Hero(Location initLocation, Image playerPic, DrawingCanvas aCanvas) {
canvas = aCanvas;

player = new VisibleImage(playerPic, canvas.getWidth()/3,
         canvas.getWidth()/3, canvas);
start();

}
public void run() 
{

}

public void move(double dx, double dy) 
{
player.move(dx, dy);
}
}
Run Code Online (Sandbox Code Playgroud)

HeroGame类(此类创建"Hero"并指定位置,以及用于移动的键)

import objectdraw.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class HeroGame extends WindowController implements KeyListener {
private Hero theHero;
private Image playerPic;
private Location initLocation;
public void begin() {
    playerPic = getImage("player.gif");
    canvas.addKeyListener ( this );
    this.addKeyListener ( this );
    requestFocusInWindow();
    theHero = new Hero(initLocation, playerPic, canvas);
    }
public void keyTyped( KeyEvent e ) { }
public void keyReleased( KeyEvent e ) { }
public void keyPressed( KeyEvent e ) {

    if ( e.getKeyCode() == KeyEvent.VK_UP ) {
        theHero.move(0,-5);
    }
    else if ( e.getKeyCode() == KeyEvent.VK_DOWN ) {
        theHero.move(0,5);
    }
    else if ( e.getKeyCode() == KeyEvent.VK_LEFT ) {
        theHero.move(-5,0);
    }
    else if ( e.getKeyCode() == KeyEvent.VK_RIGHT ) {
        theHero.move(5,0);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

再次感谢您花时间阅读本文,并希望能给予帮助.

c.s*_*.s. 0

这是接受键盘输入的游戏中相当常见的情况。问题是您的游戏需要对游戏当前按下的所有键进行操作(意味着尚未触发 KEY_RELEASE 事件的所有键)。

KeyListener只会通知您最后按下的键(并且如果您按住该键,则会继续通知您相同的键),因此您需要自己跟踪其余键的状态。

要了解如何做到这一点,请搜索键盘轮询这里是一个示例),这是一种流行的技术,您不会立即对玩家的输入采取行动,而是将按键存储在队列中,然后定期轮询该队列(即在你的游戏循环中)来决定按下或不按下哪些键并采取相应的行动。

我希望这有帮助