我试图在弹跳球代码中添加一些内容,但在动画模式下屏幕挂起一段时间后(休息)并再次重新调整。我不是能够判断为什么会这样吗?
以下是代码:
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);
}
}
}
}
答案 0 :(得分:0)
你的问题基本上来自你在同一个线程中播放声音和做动画的事实,你必须让你的应用程序多线程,一个线程用于播放声音,另一个用于显示动画。
需要注意的一点是,StdDraw.picture可能需要从文件game.gif中读取以绘制图像,我没有使用StdDraw的经验,但是每次迭代读取文件都会减慢应用程序的速度,我想将while循环外的文件读入二维数组并使用循环内的数组进行绘制会更快(但更多RAM消耗)。