예제 #1
0
 public void Reset()
 {
     CurrentDirection = SpriteAnimDirection.Forward;
     CurrentFrame     = 0;
     CurrentFrameTime = 0;
     State            = SpriteAnimState.Paused;
 }
예제 #2
0
 public SpriteAnim(Texture2D sheet, int row, int numframes, int width, int height, double frametime)
 {
     SpriteSheet = sheet;
     Offset = new Vector2(sheet.Width,sheet.Height)/2f;
     NumFrames = numframes;
     SheetRow = row;
     CellWidth = width;
     CellHeight = height;
     CurrentFrame = 0;
     CurrentFrameTime = 0;
     TargetFrameTime = frametime;
     Loop = true;
     PingPong = false;
     CurrentDirection = SpriteAnimDirection.Forward;
     State = SpriteAnimState.Paused;
 }
예제 #3
0
 public SpriteAnim(Texture2D sheet, int row, int numframes, int width, int height, double frametime)
 {
     SpriteSheet      = sheet;
     Offset           = new Vector2(sheet.Width, sheet.Height) / 2f;
     NumFrames        = numframes;
     SheetRow         = row;
     CellWidth        = width;
     CellHeight       = height;
     CurrentFrame     = 0;
     CurrentFrameTime = 0;
     TargetFrameTime  = frametime;
     Loop             = true;
     PingPong         = false;
     CurrentDirection = SpriteAnimDirection.Forward;
     State            = SpriteAnimState.Paused;
 }
예제 #4
0
 public void Play()
 {
     State = SpriteAnimState.Playing;
 }
예제 #5
0
 public void Pause()
 {
     State = SpriteAnimState.Paused;
 }
예제 #6
0
        public void Update(GameTime gameTime)
        {
            if (State != SpriteAnimState.Playing)
            {
                return;
            }

            CurrentFrameTime += gameTime.ElapsedGameTime.TotalMilliseconds;
            if (CurrentFrameTime < TargetFrameTime)
            {
                return;
            }

            CurrentFrameTime = 0;

            switch (CurrentDirection)
            {
            case SpriteAnimDirection.Forward:
                CurrentFrame++;
                if (CurrentFrame == NumFrames)
                {
                    if (PingPong && NumFrames > 1)
                    {
                        CurrentDirection = SpriteAnimDirection.Reverse;
                        CurrentFrame    -= 2;
                    }
                    else if (Loop)
                    {
                        CurrentFrame = 0;
                    }
                    else
                    {
                        State = SpriteAnimState.Paused;
                        CurrentFrame--;
                    }
                }
                break;

            case SpriteAnimDirection.Reverse:
                CurrentFrame--;
                if (CurrentFrame == -1)
                {
                    if (PingPong && NumFrames > 1)
                    {
                        CurrentDirection = SpriteAnimDirection.Forward;
                        CurrentFrame     = 1;
                    }
                    else if (Loop)
                    {
                        CurrentFrame = NumFrames - 1;
                    }
                    else
                    {
                        State = SpriteAnimState.Paused;
                        CurrentFrame--;
                    }
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #7
0
 public void Pause()
 {
     State = SpriteAnimState.Paused;
 }
예제 #8
0
 public void Play()
 {
     State = SpriteAnimState.Playing;
 }
예제 #9
0
파일: SpriteAnim.cs 프로젝트: GarethIW/LD29
        public void Update(GameTime gameTime)
        {
            if (State != SpriteAnimState.Playing) return;

            CurrentFrameTime += gameTime.ElapsedGameTime.TotalMilliseconds;
            if (CurrentFrameTime < TargetFrameTime) return;

            CurrentFrameTime = 0;

            switch(CurrentDirection)
            {
                case SpriteAnimDirection.Forward:
                    CurrentFrame++;
                    if (CurrentFrame == NumFrames)
                    {
                        if (PingPong && NumFrames > 1)
                        {
                            CurrentDirection = SpriteAnimDirection.Reverse;
                            CurrentFrame -= 2;
                        }
                        else if (Loop) CurrentFrame = 0;
                        else { State = SpriteAnimState.Paused;
                            CurrentFrame--;
                        }
                    }
                    break;
                case SpriteAnimDirection.Reverse:
                    CurrentFrame--;
                    if (CurrentFrame == -1)
                    {
                        if (PingPong && NumFrames > 1)
                        {
                            CurrentDirection = SpriteAnimDirection.Forward;
                            CurrentFrame = 1;
                        }
                        else if(Loop) CurrentFrame = NumFrames-1;
                        else
                        {
                            State = SpriteAnimState.Paused;
                            CurrentFrame--;
                        }

                    }
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
예제 #10
0
파일: SpriteAnim.cs 프로젝트: GarethIW/LD29
 public void Reset()
 {
     CurrentDirection = SpriteAnimDirection.Forward;
     CurrentFrame = 0;
     CurrentFrameTime = 0;
     State = SpriteAnimState.Paused;
 }