无法看到GRect的举动

时间:2014-04-22 15:12:11

标签: java

我想创建一个事件,以便在鼠标事件上有一个真/假的测试,在假的情况下,会发生一个简单的动画,但我只看到动画的结果,而不是动画本身。

我已定义" 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);
        }

    }
}

1 个答案:

答案 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();