SortedList键都指向同一个值

本文关键字:同一个 SortedList | 更新日期: 2023-09-27 18:25:19

在我的代码中,我在SortedList中输入4个具有不同值的键,每个键都使用:

animations.Add(0, new Animation("prefix", textures, timer, looped));

排序后的列表是这样创建的:

private SortedList<int, Animation> animations = new SortedList<int, Animation>();

但是,当我调用以更改正在播放的当前动画时,它会更改正在读取的关键帧(ID),但不会更改值。该值始终保留在最后一个输入到SortedList中的值上。

这是动画方法的改变:

    private void setAnimation(int ID)
    {
        Utilities.Log("Animation set to: " + ID + " of " + animations.Count);
        curAnim = animations[ID];
        curAnimID = ID;
        curAnim.reset();
    }

哪个输出

[29/07/2013 08:09:00 PM] Animation set to: 1 of 4
[29/07/2013 08:09:01 PM] Animation set to: 4 of 4

但视觉动画始终保持不变。这些更改是由键盘事件触发的。

我一整天都在忙这个,如果你能帮忙的话,我将不胜感激。代码的任何其他部分将根据要求提供。

EDITS:curAnim由Animation类中名为getTexture()的方法显示,该方法总是返回,就像它是最后输入的条目一样。

插入:

        //----------------IDLE----------------//
        TextureBank idleTb = new TextureBank();
        idleTb.add("idle1", c.Load<Texture2D>("idle"));
        idleTb.add("idle1" + flip_str, Utilities.FlipHorizontal(c.Load<Texture2D>("characters/wife/idle")));
        animations.Add(ANIMATIONS.IDLE, new Animation("idle", idleTb, 200, true));
        //----------------JUMP----------------//
        TextureBank jumpTb = new TextureBank();
        jumpTb.add("jump1", c.Load<Texture2D>("jump"));
        jumpTb.add("jump1" + flip_str, Utilities.FlipHorizontal(c.Load<Texture2D>("characters/wife/jump")));
        animations.Add(ANIMATIONS.JUMP, new Animation("jump", jumpTb, 200, false));
        //----------------PUNCH----------------//
        TextureBank punchTb = new TextureBank();
        punchTb.add("punch1", c.Load<Texture2D>("punch"));
        punchTb.add("punch1" + flip_str, Utilities.FlipHorizontal(c.Load<Texture2D>("characters/wife/punch")));
        animations.Add(ANIMATIONS.PUNCH, new Animation("punch", punchTb, 200, false));
        //----------------WALK----------------//
        TextureBank walkTb = new TextureBank();
        walkTb.add("walk1", c.Load<Texture2D>("walk"));
        walkTb.add("walk1" + flip_str, Utilities.FlipHorizontal(c.Load<Texture2D>("characters/wife/walk")));
        walkTb.add("walk2", c.Load<Texture2D>("walk2"));
        walkTb.add("walk2" + flip_str, Utilities.FlipHorizontal(c.Load<Texture2D>("characters/wife/walk2")));
        animations.Add(ANIMATIONS.WALK, new Animation("walk", walkTb, 200, true));
        setAnimation(ANIMATIONS.IDLE);

SortedList键都指向同一个值

如果setAnimation是从不同于从curAnim读取的线程调用的,那么您需要一些锁定来确保显示线程实际开始使用更新的值。否则,它可以很高兴地永远使用以前的动画对象,在你认为你已经替换了它很久之后