SortedList键都指向相同的值

时间:2013-07-29 19:22:44

标签: c# dictionary xna textures

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

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

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

我一整天都被困在这一天,如果你能得到帮助,那将非常感激。代码的任何其他部分将根据要求提供。

编辑:curAnim由动画类中的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);

1 个答案:

答案 0 :(得分:0)

如果从与setAnimation读取的线程不同的线程调用curAnim,则需要一些锁定以确保显示线程实际上使用更新的值开始。否则,在你认为你已经取代它之后很久就可以永远地继续使用先前的动画对象。