2

我是 C++ 新手,我决定制作一个小型回合制 RPG 引擎。这是我遇到的问题。我的类具有, , ,和Mob等属性。他们都有 getter 和 setter 一起去。我也有让参与攻击的两个小怪的方法。还已经创建了两个生命值 100、耐力 30 和力量 30 的小怪(编辑力量实际上是 5。我的错)。无论如何,这是攻击的代码:HPMPStaminaStrengthIntelligenceattack()

srand(time(0));
int damage = mobSend.getStr() * 5 + (rand() % str);
cout << damage << endl;
mobRec.setHP((mobRec.getHP() - damage));
mobSend.setStamina(mobSend.getStamina() - 5);

当我运行程序时,我有它,所以它首先打印出 HP 和 Stamina,运行攻击方法,然后再次打印 HP 和 Stamina。但是,当我运行它时,小怪的 HP 或耐力不会下降。我进行了测试以确保它有效setHP()setStamina()因此我在 main 方法中将 hp 和 stamina 设置为 0 并且它有效。

我尝试了其他loseHP()将损坏作为参数的方法:

void Mob:: loseHP(int damage) {this->HP -= damage;}

但它仍然没有工作。我在这里做错了什么?我真的很难过这里,所以一些帮助将不胜感激。

4

1 回答 1

1

问题是您在将对象传递给您的方法时按值复制对象,因此当您对andattack()进行任何更改时,这些更改实际上并未反映在您的原始 mob 实例上。mobRecmobSend

要解决此问题,您需要通过方法签名上的引用传递变量:

void attack (Mob &mobSend, Mob &mobRec){...}

这将确保在方法中所做的任何更改实际上都会修改传递给该方法的真实生物,而不是它们的临时本地副本。

于 2013-06-26T23:27:41.860 回答