私のコードでは、異なる値を持つ 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 は、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);