如何删除一个对象的实例,以便一个新的、更新的实例能够接管?

问题描述 投票:-1回答:1

在我的游戏中,我声明了一个PlayerClass(warriorrogue等),就像这样。

    public PlayerClass playerClass;

在游戏的第一帧(目前),我将我的玩家的PlayerClass实例化,就像这样。

    playerClass = new WarriorClass(player, 100);

这很好用 战士类可以让我的玩家使用一些能力。然而,现在我想让我的玩家成为一个流氓。

    playerClass = new RogueClass(player, 100);

但不知为什么,我现在有两个实例,而不是一个。我按了我的能力按钮,它同时触发了战士和流氓的能力。

在分配新的Rogue之前,我如何擦除或删除WarriorClass的引用?

如果我退出主菜单并再次登录游戏,我的玩家有两个WarriorClass的实例,会发生什么?我不知道该如何继续。

最终,我问题的根源是我不明白为什么playerClass没有像其他变量那样每次都被覆盖。

c# class polymorphism instance
1个回答
1
投票

试着删除所有对你的 player 在你 PlayerClass.

创建一个名为 Destroy() 在你的PlayerClasses(WarriorClass, RogueClass)中,每当你要创建一个新对象时就调用这个方法。

public void Destroy(){
    this.player = null;
    //remove all other references, stop tasks-threads if exists. 
}

0
投票

很抱歉没有提供足够的信息。我没有足够的理解我的问题,不知道该给什么。我实现了一个我没有意识到会导致这个错误的想法。我保留了一个能力列表,但没有在游戏开始时清除它们。每次游戏开始都会增加更多的能力。

在玩家中

    public List<Ability> ActiveAbilities = new List<Ability>();

每一个PlayerClass实例化的时候都会附加到这个列表上。

        ability1 = new LeapAbility();
        player.GetModPlayer<MyPlayer>().ActiveAbilities.Add(ability1);

这时我的键控就会触发列表中的所有内容. 玩家中的修复方法。

        ActiveAbilities.Clear();
        playerClass = new TestClass(player, 100);
© www.soinside.com 2019 - 2024. All rights reserved.