Rel*_*ual 5 java animation swing multithreading timer
我可能做错了,所以请善待。我正在开发一个 Java 游戏,我正处于测试角色移动/动画的阶段。
“人”可以在网格上左右上下移动。绘制网格的类是 gamePanel 类。按钮位于 gameControlPanel 类中。
我有一个按钮,可以在网格上生成一个人。然后我有一个按钮可以左右上下移动这个人。
当按下向上移动按钮时,它会从 person 类调用向上移动方法。(目前,我一次只测试一个“人”。)在该方法中是以下代码......
int move = 10;
while(move!=0)
{
setTopLeftPoint(new Point((int)getTopLeftPoint().getX(),
(int)getTopLeftPoint().getY() - 3));
try
{
Thread.sleep(300);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
move-=1;
}
Run Code Online (Sandbox Code Playgroud)
问题是我似乎无法从 Person 类中调用 gamePanel 类的重绘方法。为了解决这个问题,我在 gamePanel 类中创建了一个计时器,它每 20 毫秒重绘一次。
当我在人生成后按下向上按钮时,该按钮保持按下状态,直到完成 while 循环的循环,然后人的圆形表示显示在上面的网格方块中。
我会尽力回答有关此的任何问题。
如果您想以一定的时间间隔重新绘制,javax.swing.Timer那么该课程可能适合您。在特定情况下,repaint您可以从非 EDT 线程调用它,但您可能会遇到困难,因为您现在正在处理多个线程。