我想创建一个事件,以便在鼠标事件上测试真/假,在假的情况下,发生简单的动画,但我只看到动画的结果,而不是动画本身。
我已将“miss”、“dx”和“dy”定义为实例变量。
public void mousePressed(MouseEvent e) {
swingSword();
determineHit();
if (determineHit()){
GRect test = new GRect(testX, testY, BRICK_WIDTH, BRICK_HEIGHT);
test.setFilled(true);
test.setFillColor(Color.GREEN);
add(test);
testX += 30;
}
else {
GRect test = new GRect(testX, testY, BRICK_WIDTH, BRICK_HEIGHT);
test.setFilled(true);
test.setFillColor(Color.RED);
add(test);
testX += 30;
miss = new GRect(200, 200, BRICK_WIDTH, BRICK_HEIGHT);
miss.setFilled(true);
miss.setFillColor(Color.RED);
add(miss);
for (int i = 0; i < 10; i++){
miss.move(dx, dy);
pause(200);
}
}
}
请您参考如下方法:
您正在阻塞事件调度线程。
执行mousePressed
方法的线程与负责重新绘制的线程相同。因此,当该线程正在处理 for
循环(并在 pause
方法中等待)时,他没有机会实际重新绘制屏幕。
根据周围的基础设施,您可以使用自己的线程或 Swing 计时器来解决此问题。这意味着您可以将 for
循环替换为大致如下所示的代码:
final Timer timer = new Timer(200, null);
timer.addActionListener(new ActionListener()
{
int counter = 0;
@Override
public void actionPerformed(ActionEvent e)
{
miss.move(dx, dy);
counter++;
if (counter >= 10)
{
timer.stop();
}
}
});
timer.start();