我正在制作一个平台游戏,当玩家按下空间时会发射一个火球,当火球与敌人发生碰撞时,它会将健康状况降低一个,它会很好,但它会将其重置为初始状态价值,我无法弄清楚为什么
敌人类
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Enemy implements ActionListener{
private Image enemy;
private int velocity=0;
public int enemyhp=3;
private int x=500,y=380;
private boolean isAlive = true;
public void paint(Graphics g){
if(isAlive){
g.drawImage(enemy, x, y, null);
}
}
public Enemy(){
Timer timer = new Timer(1000, this);
timer.start();
}
public void update(){
enemy = new ImageIcon("C:\\Users\\steven.greens10\\Desktop\\Programs\\Raw Java\\Platform\\res\\enemy.png").getImage();
if(enemyhp==0){
die();
}
x+=velocity;
}
public void actionPerformed(ActionEvent event) {
move();
System.out.println(enemyhp);
}
private void move() {
x-=5;
}
void addX(int speed){
velocity=speed;
}
int getX(){
return x;
}
int getY(){
return y;
}
int getWidth(){
return 40;
}
int getHeight(){
return 40;
}
public void takeDamage(){
enemyhp-=1;
}
public void die(){
isAlive=false;
x=100000;
y=10000;
}
public void setX(){
isAlive=true;
x=500;
}
public void setY(){
y=380;
}
}
检查火球和敌人是否发生碰撞的方法以及它是否会在敌人类中调用降低健康状况的功能。
public void update(){
if(isCollidingWithEnemy){
enemy.takeDamage();
isVisible=false;
x=10000; y=10000;
}
当我运行代码时,由于计时器输出了敌人的健康状况,它说3直到我射击敌人然后它说“2 3 3 3 2”
答案 0 :(得分:0)
您可能会不小心定期用新实例替换您的对象。确保您只有一个Enemy
,并检查您拨打new Enemy()
的频率。
检查的一种方法是为每个对象提供唯一的名称或ID,并将其与当前enemyhp
一起打印出来。例如:
public class Enemy implements ActionListener {
private static int nextID = 0;
private final int id; /* final members must be set in the constructor and cannot be changed afterward */
public int enemyhp=3;
/* ... */
public Enemy(){
id = nextID++;
/* ... */
}
public String toString() {
return "Enemy " + id + ": enemyhp=" + enemyhp;
}
public void actionPerformed(ActionEvent event) {
move();
System.out.println(toString());
}
/* ... */
}