В моем коде я вхожу 4 клавиши с различными значениями в SortedList, каждый из которых использует:SortedList ключи указывают на то же значение
animations.Add(0, new Animation("prefix", textures, timer, looped));
отсортированный список создается следующим образом:
private SortedList<int, Animation> animations = new SortedList<int, Animation>();
Однако, когда я звоню, чтобы изменить текущую Анимацию, она меняет считываемый ключ (идентификатор), но не значение. Значение всегда остается на последнем, введенном в 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 отображается методом getTexture() в классе Animation, который всегда возвращается так, как если бы он был введен в последнюю введенную запись.
Вставки:
//----------------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);
Как вы распространяете 'curAnim' в свой интерфейс? curAnim, вероятно, установлен правильно, но ваш пользовательский интерфейс, вероятно, по-прежнему является ссылкой на тот, который был изначально установлен. – McAden
«Значение не изменяется» Я имею в виду, что при запросе префикса от ключа он возвращается так же, как и последняя запись SortedList. – Rob
'animations.Add (0, новая анимация (...))' Вы всегда используете ноль, '0'? Вы можете добавить только * одну * запись для каждого 'int' в' SortedList '. –