我目前正在尝试教自己在Java中编码,我使用eclipse,我有一个创建pong的教程,但有些它已经丢失了。我唯一有困难的部分是完成球类课程。我已经把它渲染并正确地出现在窗口中,但实际上并没有做任何事情,它只是保持静止。这是因为我不知道我需要什么代码,而所有的谷歌搜索都只导致了代码不起作用的沮丧。
到目前为止,这是我在ball类中的所有内容。
import java.awt.Color;
import java.awt.Graphics;
public class Ball extends Entity {
public Ball(int x, int y, Color color) {
super(x, y, color);
this.width = 15;
this.height = 15;
int yspeed = 1;
int xspeed = 2;
}
public void render( Graphics g ) {
super.render( g );
}
public void update() {
if (y <= 0) {
y = 0;
}
if (y >= window.HEIGHT - height - 32 ) {
y = window.HEIGHT - height -32;
}
}
到目前为止,您编写的(或从教程中复制的)球类看起来不错。你漏掉了把"生命"放进去的代码,比如让球移动的代码。你有一些域,比如xspeed
和yspeed
,但是没有代码来实际应用从一个时间单位到另一个时间单位的增量。(我希望)定期调用的update()
方法应该将两个值应用于x
和y
字段:
public void update() {
x += xspeed;
y += yspeed;
if (y <= 0) {
y = 0;
}
if (y >= window.HEIGHT - height - 32 ) {
y = window.HEIGHT - height -32;
}
}
这就是你需要的update
部分。下一件大事是执行当球击中墙壁或球拍时发生的逻辑。对于这样的事件,您需要操作xspeed
和yspeed
变量。
明显的步骤是:
public void update() {
x += xspeed;
y += yspeed;
if (y <= 0) {
y = 0;
}
if (y >= window.HEIGHT - height - 32 ) {
y = window.HEIGHT - height -32;
}
// TODO: Code to change the direction of the ball (i.e. xspeed and yspeed)
// when it hits a wall or paddle.
}
在调用render()
之前一定不要忘记调用update()