在我的游戏中,我声明了一个PlayerClass(warriorrogue等),就像这样。
public PlayerClass playerClass;
在游戏的第一帧(目前),我将我的玩家的PlayerClass实例化,就像这样。
playerClass = new WarriorClass(player, 100);
这很好用 战士类可以让我的玩家使用一些能力。然而,现在我想让我的玩家成为一个流氓。
playerClass = new RogueClass(player, 100);
但不知为什么,我现在有两个实例,而不是一个。我按了我的能力按钮,它同时触发了战士和流氓的能力。
在分配新的Rogue之前,我如何擦除或删除WarriorClass的引用?
如果我退出主菜单并再次登录游戏,我的玩家有两个WarriorClass的实例,会发生什么?我不知道该如何继续。
最终,我问题的根源是我不明白为什么playerClass没有像其他变量那样每次都被覆盖。
试着删除所有对你的 player
在你 PlayerClass
.
创建一个名为 Destroy()
在你的PlayerClasses(WarriorClass, RogueClass)中,每当你要创建一个新对象时就调用这个方法。
public void Destroy(){
this.player = null;
//remove all other references, stop tasks-threads if exists.
}
很抱歉没有提供足够的信息。我没有足够的理解我的问题,不知道该给什么。我实现了一个我没有意识到会导致这个错误的想法。我保留了一个能力列表,但没有在游戏开始时清除它们。每次游戏开始都会增加更多的能力。
在玩家中
public List<Ability> ActiveAbilities = new List<Ability>();
每一个PlayerClass实例化的时候都会附加到这个列表上。
ability1 = new LeapAbility();
player.GetModPlayer<MyPlayer>().ActiveAbilities.Add(ability1);
这时我的键控就会触发列表中的所有内容. 玩家中的修复方法。
ActiveAbilities.Clear();
playerClass = new TestClass(player, 100);