我试图弄清楚 Java 如何根据此图形代码知道从哪里开始 当我运行此代码时,它显示球从上到下移动,但我不明白为什么从顶部以及为什么从这个地方,我知道 Java 使用math.random()来设置值,但它如何设置 x 和 y 而当我尝试自己放置任何随机数时,它给出的数字大于它自己的宽度(我完全采用 pos.x 和 pos.y)
这是头等舱
package movingball;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
/**
*
* @author isslam
*/
public class Ball {
private final int RADIUS = 10;
private final Point pos;
private final Color ballColor = Color.red;
private final int CHANGE = 3;
private final int height,
width;
public Ball(int frameWidth, int frameHight) {
width = frameWidth;
hight = frameHeight;
pos = new Point();
pos.x = (int)(Math.random() * (width - RADIUS)) + RADIUS;
pos.y = (int)(Math.random() * (height / 2 - RADIUS)) + RADIUS;
}
public void paint(Graphics g) {
g.setColor(ballColor);
g.fillOval(pos.x - RADIUS, pos.y - RADIUS, 2 * RADIUS, 2 * RADIUS);
}
public void move() {
if (pos.y < height - RADIUS) {
pos.translate(0, CHANGE);
}
}
}
这是第二堂课
package movingball;
import java.awt. * ;
import javax.swing. * ;
/**
*
* @author isslam
*/
public class ClassOfMoving extends JFrame {
protected final int FRAME_WIDTH = 240;
protected final int FRAME_HIGHT = 320;
private final Ball myBall = new Ball(FRAME_WIDTH, FRAME_HEIGHT);
public ClassOfMoving(String title) {
super(title);
setSize(FRAME_WIDTH, FRAME_HEIGHT);
setDefaultCloseOperation(ClassOfMoving.EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
super.paint(g);
myBall.paint(g);
}
public void move() {
while (true) {
myBall.move();
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
System.exit(0);
}
}
}
}
主类
package movingball;
/**
*
* @author isslam
*/
public class MovingBall {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ClassOfMoving is = new ClassOfMoving("isslam");
is.setVisible(true);
is.move();
}
我不完全确定问题是什么,你似乎有点困惑。
这条线做实际的移动。
pos.translate(0, CHANGE);
Ball
位置pos
在 y 维度上用CHANGE
个像素平移。CHANGE
在其他地方被定义为 3。在计算机屏幕上,左上角位置通常为 (0,0),因此 pos.y 将增加 3,Ball
将向下移动 3 个像素*。
Math.random()
返回一个介于 0 和 1 之间的数字。以下行将球放置在 0+r 和宽度 r 之间的随机位置。
pos.x = (int)(Math.random() * (width - RADIUS)) + RADIUS;
如果要指定特定位置,请直接设置 pos.x,而不是替换 Math.random()。
y 位置定义为窗口的上半部分,因为最大值定义为height/2
。
pos.y = (int)(Math.random() * (
height / 2
- RADIUS)) + RADIUS;
*:计算机显示器的坐标系是颠倒的,而传统的坐标系是向上的。原因可能在于阴极射线管的旧油漆方式(从左上角开始),以及行式打印机以及后来基于字符的显示系统中的行号如何向下增加。
独立地,这两个类在应用程序中编译和执行时不会执行任何操作,因为它既没有 main 方法也没有静态块。 但是,如果您将其与任何框架,jar或任何其他代码结合使用,则可能会通过创建其对象来帮助执行它。希望它能回答。