所以我正在为一个项目创建一个面向对象的视频游戏Fortnite表示。让我们说一个玩家喝一个盾牌然后该玩家的个人盾牌应该上升25个。但是我有一个问题,如果一个玩家实例喝了一个盾牌,地图上的每个其他玩家实例也会得到一个增强盾牌。这对于受到伤害和其他治疗都有两种方式。
问题:
System.out.println(broseidon.getCharacter());
System.out.println(ninja.getCharacter());
broseidon.getCharacter().heal(miniShield);
System.out.println(broseidon.getCharacter());
System.out.println(ninja.getCharacter());
输出:
Health: 100, Shield: 0
Health: 100, Shield: 0
Drank minishield
Health: 100, Shield: 25
Health: 100, Shield: 25
我检查了静态变量。不确定是什么错。以下是我使用的方法。每个Account实例只有一个PlayerCharacter实例。
public class Account{
...
protected PlayerCharacter getCharacter() {
return pc;
}
}
public class PlayerCharacter{
...
//HEAL method
public void heal(HealingItem hi) {
switch(hi.getType().toLowerCase()) {
case "bandages":
if(this.getHealth() < 75) {
this.setHealth(75);
System.out.println("Used bandages to heal");
}else {
System.out.println("Alert: Bandages cannot be used past 75 health.");
}
break;
case "medkit":
this.setHealth(100);
System.out.println("Used medkit to heal");
break;
case "minishield":
if(this.getShield() < 50) {
this.setShield(this.getShield() + 25);
System.out.println("Drank minishield");
}else {
System.out.println("Alert: miniShield cannot be used past 50 shield.");
}
break;
case "bigshield":
if((this.getShield() - 50) < 50) {
this.setShield(100);
System.out.println("Drank big shield");
}else {
this.setShield(this.getShield() + 50);
System.out.println("Drank big shield");
}
break;
case "chugjug":
this.setHealth(100);
this.setShield(100);
System.out.println("Drank Chug Jug");
break;
}
}
}
如果您想了解更多有关的方法/变量,请告诉我们。我以为这个&#39;这个&#39;只适用于所调用的特定实例。现在我很困惑。
编辑: 这是Accounts的实例化(每个使用Singleton设计模式分配一个且只有一个PlayerObject)。 .heal()的使用如上所示: broseidon.getCharacter()愈合(miniShield);
Account broseidon = new Account("Broseidon", true);
Account ninja = new Account("Ninja", true);