BlueJ中的Java - 如何在对象移动特定距离后停止运行动画?

时间:2015-11-03 13:24:45

标签: java bluej

我被要求在BlueJ中创建一个程序,动画指定数量的随机大小的球,弹跳我已经成功。我只是无法弄清楚如何做最后一部分是在最后一个球离开屏幕之后停止动画(不久之后)。这就是我到目前为止所做的:

// make them bounce
    boolean finished =  false;
    while(!finished) {
        myCanvas.wait(100);           // small delay
        for(BouncingBall ball : balls) {
            ball.move();
        // stop once ball has travelled a certain distance on x axis
        if((ball.getXPosition() >= 550 + 32*numberOfBalls) ) {
            finished = true;
        }

该行

if((ball.getXPosition() >= 550 + 32*numberOfBalls) )

由本书提供,我无法解决32来自哪里可能没有帮助 - 它似乎没有被引用到代码中的任何其他地方。

我尝试过其他一些事情,例如:

if((ball.getXPosition() >= 550 + 32*numberOfBalls) && (ball.getXPosition() <= (550 + ball.getDiameter()) )

但是在最后一个球离开屏幕后,它仍会停止动画。

任何建议都会受到赞赏,我只是不知道如何处理它。 非常感谢。

Image动画工作,我想要它,以便在所有粉球离开屏幕后它立即停止运行。

2 个答案:

答案 0 :(得分:0)

试试

if (ball.getXPosition() >= 550) {

}

在目前的情况下,假设有10个球,那么只有球是550 + 32 * numberOfBalls(意味着32 * 10 + 550 = 870)。可能永远不会发生......

或者添加完整的代码,而不只是片段,因为现在不清楚。

答案 1 :(得分:0)

我对 if((ball.getXPosition()&gt; = 550 + 32 * numberOfBalls))进行了一些搜索,结果证明球是均匀分布的。所以这是有道理的。否则你必须单独使用 if(ball.getXPosition()&gt; = 550)来检查所有球是否都在屏幕之外。

另外,正如您所提到的,您必须将球的直径添加到条件中。因此:

if((ball.getXPosition() + ball.getDiameter()) >= 550) { }

参考文献:

http://lists.bluej.org/pipermail/bluej-discuss/2006-March/005457.html

http://www.javaprogrammingforums.com/whats-wrong-my-code/33178-need-randomly-change-size-programs-balls.html