我正在尝试理解这些代码:
/*
* File: BouncingBallWalls.java
* ---------------------
* This is exercise 15 in chapter 4 of "The Art and Science of Java."
* It requires me to write a program that makes an animated bouncing
* ball on the screen, bouncing off the window edges.
*/
import java.awt.*;
import acm.program.*;
import acm.graphics.*;
public class BouncingBallWalls extends GraphicsProgram {
public void run() {
GOval ball = new GOval (getWidth()/2 - BALL_SIZE/2, getHeight()/2 - BALL_SIZE, BALL_SIZE, BALL_SIZE); /* Centers the ball */
ball.setFilled(true);
ball.setFillColor(Color.BLUE);
ball.setColor(Color.BLUE);
add(ball);
double dx = (getWidth()/N_STEPS);
double dy = (getWidth()/N_STEPS);
while(true) {
ball.move(dx, dy); /* Movement for the ball */
pause(PAUSE_TIME);
if (ball.getY() > getHeight() - BALL_SIZE) { /* Each "if" statement reverses the direction of the ball on one */
dy = dy * -1; /* axis if it hits a boundry */
}
if(ball.getX() > getWidth()- BALL_SIZE) {
dx = dx * -1;
}
if(ball.getY() < 0) {
dy = dy * -1;
}
if(ball.getX() < 0) {
dx = dx * -1;
}
}
}
private static final double N_STEPS = 1000;
private static final double PAUSE_TIME = 2;
private static final double BALL_SIZE = 50.0;
}
我理解除了以下内容之外的所有内容,为什么要将 gameWidth 除以 N_STEPS ?什么是 N_STEPS ?
double dx = (getWidth()/N_STEPS);
double dy = (getWidth()/N_STEPS);
private static final double N_STEPS = 1000;
参考:http://tenasclu.blogspot.co.uk/2012/12/first-few-days-of-learning-to-program.html
答案 0 :(得分:1)
您将屏幕尺寸除以N_STEPS以获得dx和dy,它们表示您希望球在每个循环中移动的距离。 N_STEPS根据可用的屏幕宽度定义移动,以便无论屏幕大小如何,相对移动/速度都相同。
另一种观察N_STEPS的方法是控制球的平滑度和速度。无论屏幕大小如何,它都能使平滑度和速度保持一致。较高的N_STEPS将导致每个循环的球移动更平滑/更慢。
请注意您的代码:
double dx = (getWidth()/N_STEPS);
double dy = (getWidth()/N_STEPS);
应该:
double dx = (getWidth()/N_STEPS);
double dy = (getHeight()/N_STEPS);
答案 1 :(得分:0)
基本上,课程所展示的是动画球的运动。现在在while循环的每次迭代中,球必须在x中移动一定距离并在y中移动一定距离。这种增量变化表示为dx和dy。
要计算球在每个增量中应移动多少,球应移动的总距离除以迭代次数。这是为了营造平稳运动的感觉。如果步数太低而且行进所需的总距离太高,则球会从一个点跳到下一个点。
答案 2 :(得分:0)
N-STEPS是屏幕上的像素/单位距离。不同的设备有不同的尺寸。假设您的设备宽度为800像素。无论设备大小如何,您都可能想要制作一个虚构的网格。假设我们将大小除以20,我们得到40(800/20 = 40)。这给了我们40个像素或1个单位。因此,如果我们移动某些东西,我们可以水平移动40个像素或1个单位。这有助于处理不同的屏幕尺寸。