我是初学程序员,最近我开始尝试用Java制作游戏。
这是非常基本的,不包括任何类(虽然它应该)但是无论如何我试图使用var ecode = document.getElementById("postcode");
ecode.oninput = function() {
var format = ecode.value.split(" ").join("");
if (format.length > 0) {
format = format.match(new RegExp('.{1,3}','g')).join(" ");
}
this.value = format;
};
作为我的精灵在JPanel
上制作跳跃动画,但每当我尝试时间时使用JLabel
Java标签的每次移动之间的空格似乎跳过它并将标签移动到最后位置。
Thread.sleep(millis)
答案 0 :(得分:2)
您无法使用Thread.sleep()。
所有侦听器代码都在事件调度线程(EDT)上执行,该线程负责处理事件和绘制GUI。因此,当您告诉线程休眠时,GUI不能重新绘制自己,直到循环中的所有代码都已完成执行,因此您只能在最后位置看到该组件。
相反,您需要使用Swing Timer
来安排动画。阅读Swing Tutorial。有以下部分:
Concurrency in Swing
- 了解有关EDT的更多信息How to Use Swing Timers
- 有关使用计时器的示例了解更多信息。
另外,请勿使用KeyListener。相反,最好使用Key Bindings
。本教程还有一个关于How to Use Key Bindings
的部分。
编辑:
请参阅:Motion Using the Keyboard中的KeyboardAnimation
示例,其中有一个显示两者的工作示例: