弹跳球动画

时间:2015-10-23 18:08:31

标签: java

我试图在弹跳球代码中添加一些内容,但在动画模式下屏幕挂起一段时间后(休息)并再次重新调整。我不是能够判断为什么会这样吗?

以下是代码:

public class Programme {

    public static void main(String[] args) {
        int N = 5;
        double[] rx = new double[10];
        double[] ry = new double[10];
        double[] vx = new double[10];
        double[] vy = new double[10];

        for (int i = 0; i < N; i++) {
            rx[i] = Math.random() * 2 - 1;
            ry[i] = Math.random() * 2 - 1;
            vx[i] = 0.02;
            vy[i] = 0.03;
        }
        double radius = .06;
        StdDraw.setXscale(-1.0, +1.0);
        StdDraw.setYscale(-1.0, +1.0);
        while (true) {
            for (int i = 0; i < N; i++) {
                if (Math.abs(rx[i] + vx[i]) + radius > 1.0) {
                    vx[i] = -vx[i];
                    StdAudio.play("music.wav");
                }
                if (Math.abs(ry[i] + vy[i]) + radius > 1.0) {
                    vy[i] = -vy[i];
                    StdAudio.play("music.wav");
                }
                rx[i] = rx[i] + vx[i];
                ry[i] = ry[i] + vy[i];

                StdDraw.setPenColor(StdDraw.GREEN);
                StdDraw.filledSquare(0.0, 0.0, 1.0);
                for (int j = 0; j < N; j++) {
                    StdDraw.picture(rx[j], ry[j], "game.gif");
                }
                StdDraw.show(10);
            }
        }

    }
}

1 个答案:

答案 0 :(得分:0)

你的问题基本上来自你在同一个线程中播放声音和做动画的事实,你必须让你的应用程序多线程,一个线程用于播放声音,另一个用于显示动画。

需要注意的一点是,StdDraw.picture可能需要从文件game.gif中读取以绘制图像,我没有使用StdDraw的经验,但是每次迭代读取文件都会减慢应用程序的速度,我想将while循环外的文件读入二维数组并使用循环内的数组进行绘制会更快(但更多RAM消耗)。