在我的教科书中,我很难理解这个例子的概念。这个想法是用红、黄和绿灯画一个红绿灯。我有一些问题。我无法弄清楚代码的哪一部分做了什么。
- 我是否正确假设
cx
并且cy
要弄清楚页面的中心? - 是
fx
和fy
找出框架的中心? - 我不知道它是做什么
dy
的,为什么它被 4 分而不是 3 分给 3 盏灯,这LAMP_RADIUS
完全让我感到困惑。 - 在红色,黄色和绿色的所有三个
add(createFilledCircle)
上,我不明白它们的位置是如何在红绿灯框架内计算的。 - 在
createFilledCircle()
我不明白的方法中GOval circle = newGOval(x-r, y-r, 2 * r, 2 * r);
。我不明白什么x-r
和做什么以及y-r
这与职位有何关系。
import acm. graphics.*;
import acm. program.*;
import java.awt.*;
public class DrawStoplight extends GraphicsProgram {
public void run () {
double cx = getWidth() / 2;
double cy = getHeight() / 2;
double fx = cx - FRAME_WIDTH / 2;
double fy = cy- FRAME_HEIGHT / 2;
double dy = FRAME_HEIGHT / 4 + LAMP_RADIUS / 2;
GRect frame = new GRect(fx, fy, FRAME_WIDTH, FRAME_HEIGHT);
frame.setFilled(true);
frame.setColor(Color.GRAY);
add(frame);
add(createFilledCircle(cx, cy - dy, LAMP_RADIUS, Color.RED));
add(createFilledCircle(cx, cy, LAMP_RADIUS, Color.YELLOW));
add(createFilledCircle(cx, cy + dy, LAMP_RADIUS, Color.GREEN));
}
private GOval createFilledCircle(double x, double y, double r, Color color){
GOval circle = new GOval(x-r, y-r, 2 * r, 2 * r)
circle.setColor(color);
circle.setFilled(true);
return circle;
}
private static final double FRAME_WIDTH = 50;
private static final double FRAME_HEIGHT = 100;
private static final double LAMP_RADIUS = 10;
}