C# SortedList键都指向相同的值

C# SortedList键都指向相同的值,c#,dictionary,xna,textures,C#,Dictionary,Xna,Textures,在我的代码中,我在SortedList中输入4个不同值的键,每个键使用: animations.Add(0, new Animation("prefix", textures, timer, looped)); 已排序列表的创建方式如下: private SortedList<int, Animation> animations = new SortedList<int, Animation>(); 哪个输出 [29/07/2013 08:09:00 PM] Anim

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

animations.Add(0, new Animation("prefix", textures, timer, looped));
已排序列表的创建方式如下:

private SortedList<int, Animation> animations = new SortedList<int, Animation>();
哪个输出

[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由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);
/--------------空闲----------------//
TextureBank idleTb=新的TextureBank();
idleTb.添加(“idle1”,c.加载(“idle”);
idleTb.add(“idle1”+flip_str,Utilities.FlipHorizontal(c.Load(“characters/fixer/idle”));
添加(animations.IDLE,新动画(“IDLE”,idleTb,200,true));
//----------------跳跃----------------//
TextureBank jumpTb=新的TextureBank();
jumpTb.添加(“jump1”,c.加载(“跳跃”);
jumpTb.add(“jump1”+flip_str,Utilities.FlipHorizontal(c.Load(“characters/fixer/jump”));
添加(animations.JUMP,新动画(“JUMP”,jumpTb,200,false));
//----------------冲床----------------//
TextureBank punchTb=新的TextureBank();
punchTb.添加(“punch1”,c.加载(“冲压”);
punchTb.add(“punch1”+flip_str,Utilities.FlipHorizontal(c.Load(“characters/fixer/punch”));
添加(animations.PUNCH,新动画(“PUNCH”,punchTb,200,false));
//----------------走----------------//
TextureBank walkTb=新建TextureBank();
walkTb.添加(“walk1”,c.加载(“walk”);
walkTb.add(“walk1”+flip_str,Utilities.FlipHorizontal(c.Load(“characters/wide/walk”));
walkTb.添加(“walk2”,c.加载(“walk2”);
walkTb.add(“walk2”+flip_str,Utilities.FlipHorizontal(c.Load(“characters/fixer/walk2”));
添加(animations.WALK,新动画(“WALK”,walkTb,200,true));
setAnimation(ANIMATIONS.IDLE);

如果从与从
curAnim
读取线程不同的线程调用
setAnimation
,则需要进行一些锁定,以确保显示线程实际开始使用更新的值。否则,在您认为已替换之前的动画对象很久之后,它可以愉快地永远使用它。

您如何将
curAnim
传播到您的UI?curAnim可能设置正确,但您的UI可能仍然是对最初设置的UI的引用。听起来您正在创建纹理、插入纹理、重用纹理、再次插入纹理等,每次都覆盖纹理。每次创建一个新的,你很可能会没事。@Rob
c
是被重用的,很可能是问题所在。在每次加载和测试之前添加一个
c=new()
。同意,看起来您正在将c添加到引用类型的列表中,然后在下一次加载时更改c的纹理。我强烈怀疑
        //----------------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);