【发布时间】:2014-06-11 12:57:35
【问题描述】:
我的问题是,我怎样才能让我的 move() 方法使用 KeyEvents 即 KeyEvent.VK_DOWN 工作?
我目前正在尝试使用import java.awt.event.KeyEvent;,其中我将使用箭头键而不是数字键盘键在二维网格中移动玩家。我在我的超类User 和类Player extends User 中有我的操作moveUp(); moveRight(); moveDown(); 和moveLeft(); 并包含关键事件方法。当我使用箭头键时,演员根本不会移动,但是当我手动单击网格中的演员并选择一种方法时,它将移动。因此我的移动方法有效,所以我假设我的 KeyEvent 设置已损坏。提供了显示我手动控制方法的图片。
包含移动方法的用户
package info.gridworld.actor;
import info.gridworld.grid.Grid;
import info.gridworld.grid.Location;
public class User extends Actor {
private boolean isStopped = false;
public User()
{
setColor(null);
}
public void moveUp(){
moveTo(getLocation().getAdjacentLocation(Location.NORTH));
}
public void moveDown(){
moveTo(getLocation().getAdjacentLocation(Location.SOUTH));
}
public void moveLeft(){
moveTo(getLocation().getAdjacentLocation(Location.WEST));
}
public void moveRight(){
moveTo(getLocation().getAdjacentLocation(Location.EAST));
}
}
Player 类包含 KeyEvents
package game.classes;
import info.gridworld.actor.User;
import java.awt.event.KeyEvent;
public class Player extends User{
public Player(){
}
public void keyPressed(KeyEvent e){
int keys = e.getKeyCode();
if((keys == KeyEvent.VK_UP)){
moveUp();
}
else if((keys == KeyEvent.VK_DOWN)){
moveDown();
}
else if((keys == KeyEvent.VK_LEFT)){
moveLeft();
}
else if((keys == KeyEvent.VK_RIGHT)){
moveRight();
}
}
}
主类
package game.classes;
import info.gridworld.grid.*;
public class PlayerRunner{
private static GameGrid world = new GameGrid();
public static void main(String[] args)
{
Player player = new Player();
world.add(new Location(0, 0), player);
world.show();
}
}
【问题讨论】:
-
我不认为它是这样工作的,
World不是收到关键信息吗? -
我建议为此使用 keyBinding
-
@MadProgrammer 我会试试那个例子我也没有看到 ActorWorld 类中的 keyPressed 方法
-
@Rod_Algonquin 我也这么认为,但是 OP 使用的是
gridworldAPI,它的工作方式略有不同......并不是说不可能,但如果我们能找到适用于 API 的东西它将产生更好的结果,如果失败...hack,hack,hack ;)