Click here to Skip to main content
15,881,413 members
Articles / Multimedia / GDI

A Small GDI+ Sprite Animation Library

Rate me:
Please Sign up or sign in to vote.
4.10/5 (16 votes)
8 Sep 2006CPOL2 min read 64.3K   3.1K   39  
Animate and control sprites using GDI+.
Imports winSpriteLib

Public Class TestEngineSprite
    Inherits winSprite

#Region " Private Types "
    Private Enum eFrames As Integer
        kUpOne
        kUpTwo
        kUpThree

        kRightOne
        kRightTwo
        kRightThree

        kDownOne
        kDownTwo
        kDownThree

        kLeftOne
        kLeftTwo
        kLeftThree
    End Enum
#End Region

#Region " Public Types "
    Public Enum eAnimationType
        kUp
        kRight
        kDown
        kLeft
    End Enum
#End Region

#Region " Variables "
    Private m_Mode As eAnimationType
#End Region

#Region " Constructor "
    Public Sub New()
        MyBase.New("rm17.bmp", 24, 32, Color.FromArgb(255, 1, 0, 0), winFrameHandler.eFrameDirections.kRightDown, New winChipRange(6, 0, 3, 4))
        MyBase.IsMovable = True
    End Sub
#End Region

#Region " Overrides "
    Public Overrides Sub HandleKeyPress(ByVal theKey As winKeyboardAPI.eKeys, ByVal isDown As Boolean)
        Select Case theKey
            Case winKeyboardAPI.eKeys.kEscape
                If isDown Then modLoad.EndGame()
            Case winKeyboardAPI.eKeys.kUpArrow
                SetMode(eAnimationType.kUp)
                If isDown Then
                    Me.MoveDelta = New Point(0, -Me.RecomendedSpeed)
                Else
                    Me.MoveDelta = Point.Empty
                End If
            Case winKeyboardAPI.eKeys.kRightArrow
                SetMode(eAnimationType.kRight)
                If isDown Then
                    Me.MoveDelta = New Point(Me.RecomendedSpeed, 0)
                Else
                    Me.MoveDelta = Point.Empty
                End If
            Case winKeyboardAPI.eKeys.kDownArrow
                SetMode(eAnimationType.kDown)
                If isDown Then
                    Me.MoveDelta = New Point(0, Me.RecomendedSpeed)
                Else
                    Me.MoveDelta = Point.Empty
                End If
            Case winKeyboardAPI.eKeys.kLeftArrow
                SetMode(eAnimationType.kLeft)
                If isDown Then
                    Me.MoveDelta = New Point(-Me.RecomendedSpeed, 0)
                Else
                    Me.MoveDelta = Point.Empty
                End If
        End Select
    End Sub

    Public Overrides Sub Move()
        If Not Me.MoveDelta.Equals(Point.Empty) Then AdvanceFrame()
        MyBase.Move()
    End Sub
#End Region

#Region " Subs "
    Private Sub SetMode(ByVal theMode As eAnimationType)
        If m_Mode = theMode Then Exit Sub

        m_Mode = theMode
        Select Case theMode
            Case eAnimationType.kDown
                MyBase.CurFrame = eFrames.kDownOne
            Case eAnimationType.kLeft
                MyBase.CurFrame = eFrames.kLeftOne
            Case eAnimationType.kRight
                MyBase.CurFrame = eFrames.kRightOne
            Case eAnimationType.kUp
                MyBase.CurFrame = eFrames.kUpOne
        End Select
    End Sub

    Private Sub AdvanceFrame()
        Select Case m_Mode
            Case eAnimationType.kDown
                Select Case CType(MyBase.CurFrame, eFrames)
                    Case eFrames.kDownOne
                        MyBase.CurFrame = eFrames.kDownTwo
                    Case eFrames.kDownTwo
                        MyBase.CurFrame = eFrames.kDownThree
                    Case eFrames.kDownThree
                        MyBase.CurFrame = eFrames.kDownOne
                    Case Else
                        MyBase.CurFrame = eFrames.kDownOne
                End Select
            Case eAnimationType.kLeft
                Select Case CType(MyBase.CurFrame, eFrames)
                    Case eFrames.kLeftOne
                        MyBase.CurFrame = eFrames.kLeftTwo
                    Case eFrames.kLeftTwo
                        MyBase.CurFrame = eFrames.kLeftThree
                    Case eFrames.kLeftThree
                        MyBase.CurFrame = eFrames.kLeftOne
                    Case Else
                        MyBase.CurFrame = eFrames.kLeftOne
                End Select
            Case eAnimationType.kRight
                Select Case CType(MyBase.CurFrame, eFrames)
                    Case eFrames.kRightOne
                        MyBase.CurFrame = eFrames.kRightTwo
                    Case eFrames.kRightTwo
                        MyBase.CurFrame = eFrames.kRightThree
                    Case eFrames.kRightThree
                        MyBase.CurFrame = eFrames.kRightOne
                    Case Else
                        MyBase.CurFrame = eFrames.kRightOne
                End Select
            Case eAnimationType.kUp
                Select Case CType(MyBase.CurFrame, eFrames)
                    Case eFrames.kUpOne
                        MyBase.CurFrame = eFrames.kUpTwo
                    Case eFrames.kUpTwo
                        MyBase.CurFrame = eFrames.kUpThree
                    Case eFrames.kUpThree
                        MyBase.CurFrame = eFrames.kUpOne
                    Case Else
                        MyBase.CurFrame = eFrames.kUpOne
                End Select
        End Select
    End Sub
#End Region

End Class

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) www.ruskin.com
United States United States
PC Programmer/Analyst

Comments and Discussions