public void Test_OnAnimate_Event_2() { var clip = new AnimationClip (100, "TestClip"); clip.WrapMode = WrapMode.Once; clip.Play (); var args1 = new MyEventArgs (1); var args2 = new MyEventArgs (2); var args3 = new MyEventArgs (3); var count = 0; clip.AddEvent (0, (sender, args) => count = 1, null); clip.AddEvent (50, (sender, args) => count = 2, null); clip.AddEvent (100, (sender, args) => count += 1, null); clip.AddEvent (100, (sender, args) => count += 1, null); var anim = new AnimationController (); anim.AddClip (clip); // 停止中のクリップはイベントを発火しない clip.Stop (); anim.OnAnimate (0, 0); Assert.AreEqual (0, count); clip.Play (); // 逆再生中の dtime は逆方向 // clip.SetSpeed (-1, 50); // anim.OnAnimate (40, 10); // Assert.AreEqual (2, count); count = 0; clip.Speed = 1; // 同じポジションで重複したイベントは両方発火 anim.OnAnimate (100, 0); Assert.AreEqual (2, count); }
public void Test_Stop() { var clip = new AnimationClip (100, "ClipName"); Assert.AreEqual (false, clip.IsPlaying); clip.Play (); clip.Stop (); Assert.AreEqual (false, clip.IsPlaying); }
public static Node Create(Vector3 pos) { var cmp = new MyCharacter (); // Body var spr1 = new Sprite (24, 32); spr1.AddTexture (new Texture ("media/Character-Gelato.png")); var col1 = new CollisionObject (); col1.Shape = new BoxShape (spr1.Width / 2, spr1.Height / 2, 1); col1.Offset = new Vector3 (spr1.Width / 2, spr1.Height / 2, 1); col1.IgnoreWith = (int)MyGroup.Character; // Foot var spr2 = new Sprite (24, 4); spr2.AddTexture (new Texture ("media/image128x128(Red).png")); var col2 = new CollisionObject (); col2.Shape = new BoxShape (2,2, 2); spr2.Offset = new Vector2 (0, spr1.Height + 2); col2.Offset = new Vector3 (spr1.Width / 2, spr1.Height + 2 + 4/2, 1); col2.IgnoreWith = (int)MyGroup.Character; var node = new Node ("MyCharacter"); node.Attach (cmp); node.Attach (spr1); node.Attach (col1); node.Attach (spr2); node.Attach (col2); node.Translation = pos; node.DrawPriority = -1; node.GroupID = (int)MyGroup.Character; // アニメーションの設定 var track1 = new AnimationTrack ("TextureOffset", InterpolationType.Step); track1.AddKeyframe (0, new Vector2 (0, 64)); track1.AddKeyframe (300, new Vector2 (24, 64)); track1.AddKeyframe (600, new Vector2 (48, 64)); var clip1 = new AnimationClip (900, "MyCharacter.Down"); clip1.AddTrack (spr1, track1); var track2 = new AnimationTrack ("TextureOffset", InterpolationType.Step); track2.AddKeyframe (0, new Vector2 (0, 0)); track2.AddKeyframe (300, new Vector2 (24, 0)); track2.AddKeyframe (600, new Vector2 (48, 0)); var clip2 = new AnimationClip (900, "MyCharacter.Up"); clip2.AddTrack (spr1, track2); var track3 = new AnimationTrack ("TextureOffset", InterpolationType.Step); track3.AddKeyframe (0, new Vector2 (0, 32)); track3.AddKeyframe (300, new Vector2 (24, 32)); track3.AddKeyframe (600, new Vector2 (48, 32)); var clip3 = new AnimationClip (900, "MyCharacter.Right"); clip3.AddTrack (spr1, track3); var track4 = new AnimationTrack ("TextureOffset", InterpolationType.Step); track4.AddKeyframe (0, new Vector2 (0, 96)); track4.AddKeyframe (300, new Vector2 (24, 96)); track4.AddKeyframe (600, new Vector2 (48, 96)); var clip4 = new AnimationClip (900, "MyCharacter.Left"); clip4.AddTrack (spr1, track4); node.UserData.Add (clip1.Name, clip1); node.UserData.Add (clip2.Name, clip2); node.UserData.Add (clip3.Name, clip3); node.UserData.Add (clip4.Name, clip4); // ステート管理 cmp.sm.Configure (State.Down) .Ignore (Trigger.Down) .Permit (Trigger.Up, State.Up) .Permit (Trigger.Right, State.Right) .Permit (Trigger.Left, State.Left) .OnExit (x => clip1.Stop ()) .OnEntry (x => clip1.Play ()); cmp.sm.Configure (State.Up) .Permit (Trigger.Down, State.Down) .Ignore (Trigger.Up) .Permit (Trigger.Right, State.Right) .Permit (Trigger.Left, State.Left) .OnExit (x => clip2.Stop ()) .OnEntry (x => clip2.Play ()); cmp.sm.Configure (State.Right) .Permit (Trigger.Down, State.Down) .Permit (Trigger.Up, State.Up) .Ignore (Trigger.Right) .Permit (Trigger.Left, State.Left) .OnExit (x => clip3.Stop ()) .OnEntry (x => clip3.Play ()); cmp.sm.Configure (State.Left) .Permit (Trigger.Down, State.Down) .Permit (Trigger.Up, State.Up) .Permit (Trigger.Right, State.Right) .Ignore (Trigger.Left) .OnExit (x => clip4.Stop ()) .OnEntry (x => clip4.Play ()); return node; }