gpt4 book ai didi

java - 使用 KeyEvent 时遇到问题

转载 作者:行者123 更新时间:2023-12-01 12:52:16 25 4
gpt4 key购买 nike

我的问题是,如何使用 KeyEventsKeyEvent.VK_DOWN 让我的 move() 方法正常工作?我目前正在尝试使用 import java.awt.event.KeyEvent; ,其中我将使用箭头键而不是小键盘键在二维网格中移动玩家。我的操作 moveUp(); moveRight(); moveDown();moveLeft(); 位于我的父类(super class) User 和类 Player 扩展了 User 并包含关键事件方法。当我使用箭头键时, Actor 根本不会移动,但是当我手动单击网格中的 Actor 并选择一种方法时,它将移动。因此我的移动方法有效,所以我假设我的 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();
}
}

PreMove

moveDown() Selected

最佳答案

你正在扩展Actor,它与GUI无关,而KeyEvents和相关的东西是一个 Swing 的东西。您实际上需要将 KeyListener 添加到 JPanel。据我所知,现在 Actor 类中只有额外的方法。

GUI 实际上并未在 AP 测试中,因此没有太多内容,但看起来您可以扩展 info.gridworld.gui.GridPanel。因此重写构造函数为:

public GridPanel(DisplayMap map, ResourceBundle res)
{
super(map, res);
addKeyListener(new KeyListener()
{
// Put the KeyListener methods here.
// (All of them: KeyListener is an interface
}
}

这有点粗糙,但我认为它应该可行。

我假设您将拥有对 Actor 的引用,无论如何您都可以使用箭头键移动该 Actor,因此您只需调用其移动方法即可。

关于java - 使用 KeyEvent 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24131118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com