0
我試圖創建一個遊戲,以便玩家可以在所有方向移動(N,NW,W,SW,S,SE,E,NE),但是當我捕獲擊鍵會使我在一個對角線方向上移動一次,但如果我按住它,它會切換到其中一個基本方向(N,W,S,E)。使用Java Canvas在半主要方向移動播放器
主類的按鍵偵聽
private class MultiKeyPressListener extends KeyAdapter {
private final Set<Character> pressed = new HashSet<Character>();
@Override
public synchronized void keyPressed(KeyEvent e) {
pressed.add(e.getKeyChar());
if(pressed.size() > 1){
System.out.println(pressed);
//LEFT UP PRESSED
if (e.getKeyCode() == KeyEvent.VK_LEFT && e.getKeyCode() == KeyEvent.VK_UP
|| e.getKeyCode() == KeyEvent.VK_A && e.getKeyCode() == KeyEvent.VK_W) {
player.direction = "NW";
}
//UP RIGHT PRESSED
if (e.getKeyCode() == KeyEvent.VK_UP && e.getKeyCode() == KeyEvent.VK_RIGHT
|| e.getKeyCode() == KeyEvent.VK_W && e.getKeyCode() == KeyEvent.VK_D) {
player.direction = "NE";
}
//RIGHT DOWN PRESSED
if (e.getKeyCode() == KeyEvent.VK_RIGHT && e.getKeyCode() == KeyEvent.VK_DOWN
|| e.getKeyCode() == KeyEvent.VK_S && e.getKeyCode() == KeyEvent.VK_D) {
player.direction = "SE";
}
}else{
//DOWN LEFT PRESSED
if (e.getKeyCode() == KeyEvent.VK_LEFT && e.getKeyCode() == KeyEvent.VK_DOWN
|| e.getKeyCode() == KeyEvent.VK_S && e.getKeyCode() == KeyEvent.VK_A) {
player.direction = "SW";
}
//LEFT PRESSED
if (e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_A) {
player.direction = "W";
}
//DOWN PRESSED
if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_S) {
player.direction = "S";
}
//RIGHT PRESSED
if (e.getKeyCode() == KeyEvent.VK_RIGHT || e.getKeyCode() == KeyEvent.VK_D) {
player.direction = "E";
}
//UP PRESSED
if (e.getKeyCode() == KeyEvent.VK_W || e.getKeyCode() == KeyEvent.VK_UP) {
player.direction = "N";
}
}
player.move();
}
@Override
public synchronized void keyReleased(KeyEvent e) {
pressed.remove(e.getKeyChar());
}
}
Player類
public void move(){
if(direction.equals("N")){
y-= moveRate;
}else if(direction.equals("NW")){
y-= moveRate;
x-= moveRate;
}else if(direction.equals("W")){
x-= moveRate;
}else if(direction.equals("SW")){
x-= moveRate;
y+= moveRate;
}else if(direction.equals("S")){
y+= moveRate;
}else if(direction.equals("SE")){
y+= moveRate;
x+= moveRate;
}else if(direction.equals("E")){
x+= moveRate;
}else if(direction.equals("NE")){
x+= moveRate;
y-= moveRate;
}
//System.out.println("Moving " + direction);
}
您能不能給我一些示例代碼或鏈接?謝謝! – Freddy05