gpt4 book ai didi

java - 矩形不能用方向键移动

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:23 25 4
gpt4 key购买 nike

我正在尝试制作简单的游戏,但我的第一个问题是当我按箭头键时我的矩形没有移动。

这是我的代码:

public class Gameseeting extends JPanel implements ActionListener, KeyListener
{
Timer tt= new Timer(5, this);
int x=2, y=210, velx=0,vely=0;
Gameseeting ()
{
tt.start();
setFocusable(true);
addKeyListener(this);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawRect(x, y, 40, 50);
}

public void actionPerformed(ActionEvent ae)
{

x += velx;
y += vely;
repaint();
}

public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();

if (code == KeyEvent.VK_DOWN) {
vely = 1;
velx = 0;
}
if (code == KeyEvent.VK_UP) {
vely = -1;
velx = 0;
}
if (code == KeyEvent.VK_LEFT) {
vely = 0;
velx = -1;
}
if (code == KeyEvent.VK_RIGHT) {
vely = 0;
velx = 1;
}
}

public void keyTyped(KeyEvent ke)
{
}

public void keyReleased(KeyEvent ke) {
velx=0;
vely=0;
}
}

我需要你的帮助,请告诉我我做错了什么。谢谢!

最佳答案

我已经阅读了你的代码好几次了,没有任何东西让我觉得不正确。因此,我创建了一个小启动程序,它使用您的自定义 JPanel 作为内容 Pane 创建一个 JFrame ...

public class MoveRectangleArrowKeys {

public static void main(String[] args) {
SwingUtilities.invokeLater(MoveRectangleArrowKeys::new);
}

MoveRectangleArrowKeys() {
JFrame frame = new JFrame("Move Rectangle with Arrow Keys");
frame.setSize(800, 600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new Gameseeting());
frame.setVisible(true);
}
}

...它按预期工作。

所以,问题出在其他地方。无论是在面板的创建中,还是在与其他代码的互操作中,或者在其预期行为中。

第一,创造。 Swing 组件只能在 Swing 的事件调度线程 (EDT) 上创建。如果您在 main 方法创建应用程序的 UI 时没有使用 SwingUtilities.invokeAndWait(...)SwingUtilities.invokeLater(...),则可能会将 Swing 置于不良状态。

第二,与其他代码的互操作。您已调用 setFocusable(true);,这使您的组件可聚焦。但是,如果框架中存在多个可聚焦组件,则焦点可能会被另一 UI 元素占据。尝试在面板中单击鼠标。如果矩形开始响应箭头键,那么您可能只需要调用 requestFocusInWindow()框架变得可见后,在您的 Gameseeting 面板上。

第三,你的期望可能是错误的。如果您按数字键盘上的向上箭头,您可能会期望矩形会响应 VK_UP 代码而移动,但事实并非如此。该代码需要测试 VK_NUMPAD8代码。

无论如何,发布的代码是有效的。如果您简化了代码并将其发布到 StackOverflow 上,则可能会无意中删除了有问题的代码。如果您没有简化它,则问题出在项目中的其他代码上。如果上述提示没有帮助您,您将需要编辑您的帖子以添加更多信息(和代码),以便我们重现问题并提出解决方案。

请记住发布一个最小的完整可验证示例。您发布的代码不完整;我必须添加上面的启动器代码来创建和测试您的自定义 JPanel。由于它没有说明问题,因此它不是一个可验证的示例。可能是启动代码有问题,您的启动代码失败,但我的启动代码失败。 “最少”意味着删除重现问题不需要的所有不必要的代码。例如,您可以删除 VK_UPVK_LEFTVK_DOWN 代码,只保留 VK_RIGHT 代码。这是一个最小化,但仍可能使代码“完整”。但是删除 JPanel 的构造并不会给您留下完整的示例。测试您发布的代码,并确保它仍然显示问题;否则我们只能猜测真正的问题。

关于java - 矩形不能用方向键移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49863346/

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