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