【发布时间】:2015-02-05 13:11:02
【问题描述】:
在尝试让游戏角色在 java 中跳转时,我尝试使用 Thread.sleep() 使图像向上移动 5 个像素,然后等待例如100 毫秒,然后再次向上移动 5 个像素,等等。
相反,当图像需要向上移动 5 步,每步 5 像素,并且每次等待 100 毫秒时,它会等待 500 毫秒并向上移动 25 像素。
我无法解释这种行为,网上似乎也没有答案。请注意,我的程序不包含线程。这是我的代码:
ImageIcon poppetje1 = new ImageIcon("img/poppetje1.jpg");
JLabel poppetje2 = new JLabel(poppetje1);
...
public void jump() {
try {
poppetje2.setBounds(poppetje2.getX(), (poppetje2.getY()-5), poppetje1.getIconWidth(), poppetje1.getIconHeight());
Thread.sleep(100);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
...
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_W) {
for(int c = 0; c < 10; c++) {
jump();
repaint();
}
}
}
我希望我的代码就这么多,如果我应该上传完整的代码,请询问。
提前感谢您的宝贵时间。
【问题讨论】:
-
如果您正在执行此类编程,我建议您查看“游戏循环”。你不应该在这种模式下那样睡觉。
-
您正在事件调度线程上睡觉,这不好,因为它会使您的用户界面无响应并且可能不会执行您想要的操作。您可以改用某种计时器(例如,java.swing.Timer)。正如 David Ehrmann 所建议的,您最好研究游戏循环或使用 Java 框架来开发 libgdx 或 Slick2D 等游戏。
-
谢谢大家,我用java.swing.Timer解决了,现在程序运行流畅了:)
标签: java thread-sleep