我想创建一个事件,以便在鼠标事件上有一个真/假的测试,在假的情况下,会发生一个简单的动画,但我只看到动画的结果,而不是动画本身。
我已定义" 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);
}
}
}
答案 0 :(得分:1)
您正在阻止事件派发线程。
执行mousePressed
方法的线程与重新绘制相同。因此,当这个线程处理for
- 循环(并在pause
方法中等待)时,他没有机会重新绘制屏幕。
根据周围的基础设施,您可以使用自己的线程或使用摆动计时器来解决此问题。这意味着您可以使用粗略的代码替换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();