程序代码:
package cn.sxt.bird;
Bird.java
private void move() {
if(y > SxtGameFrame.GAME_HEIGHT - height - 72) {
y = SxtGameFrame.GAME_HEIGHT - height - 72;
live = false;
}
if(y < 35) {
y = 35;
}
y += v;
}
这里三条分支之间是有联系的
尤其是后面两个分支
说说问题吧,当到达顶部逻辑处理为不能再往上升。。。然而,实际运行并不是这样,
爬升距离为V + A * time1,按UP键上升就顶部越界了!
程序代码:
public void draw(Graphics g) {
//g.fillOval(x, y, width, height);
g.drawImage(birdImg, x, y, null);
this.width = birdImg.getWidth(null);
this.height = birdImg.getHeight(null);
setV();
move();
}
那么参照这里:
if(up) { //向上
v = -(V + A * time1);
} else { //向下
v= (V0 + A * time);
}
move方法体里应改为:
程序代码:
private void move() {
if(y > SxtGameFrame.GAME_HEIGHT - height - 72) {
y = SxtGameFrame.GAME_HEIGHT - height - 72;
live = false;
}
if(y < 35) {
y = 35;
}
else y += v;
}
至于birdImg这个静态变量,为什么要设为静态的?
private static Image birdImg = birdImgs[0];