Animation-Lib
Übersicht BlitzBasic Codearchiv
Freak123Betreff: Animation-Lib |
Di, Apr 10, 2012 11:14 Antworten mit Zitat |
|
---|---|---|
Bei eimen kleinen Produkt ist diese Animationslib als Nebenprodukt herausgekommen.
Im großen und ganzen steuert die Lib den Ablauf der Animationen eines AnimationsObjekts. Code: [AUSKLAPPEN] ;Animation ; Created by Freak123 ; Last updated: Const ANIMATIONOBJECT_MAXANIMATIONS = 20 Type TAnimationObject Field image Field animation.TAnimation[ANIMATIONOBJECT_MAXANIMATIONS] Field animationcount Field activeanimation.TAnimation Field actualframe End Type Type TAnimation Field from, end Field parent.TAnimationObject End Type Function CreateAnimationObject.TAnimationObject( image ) Local ao.TAnimationObject=New TAnimationObject ao\image=image Return ao End Function Function AddAnimation.TAnimation( parent.TAnimationObject, start, End ) If parent\animationcount=ANIMATIONOBJECT_MAXANIMATIONS Then Return Null Local a.TAnimation=New TAnimation a\from=start a\End=End a\parent=parent a\parent\animation[a\parent\animationcount]=a a\parent\animationcount=a\parent\animationcount+1 Return a End Function Function StartAnimation( anim.TAnimation ) anim\parent\activeanimation=anim anim\parent\actualframe=anim\from End Function Function StopAnimation( anim.TAnimation ) anim\parent\activeanimation=Null End Function Function RemoveAnimation( anim.TAnimation ) Local p.TAnimationObject = anim\parent Local found=False For i=0 To p\animationcount Local a.TAnimation=p\animation[i] If found=True Then p\animation[i-1]=p\animation[i] End If If a=anim Then found=True Next p\animationcount=p\animationcount-1 End Function Function RenderAnimation( animobj.TAnimationObject, x, y, update=1 ) If animobj\activeanimation<>Null Then DrawImage animobj\image, x, y, animobj\actualframe If update Then UpdateAnimation( animobj ) End If End Function Function UpdateAnimation( animobj.TAnimationObject ) If animobj\activeanimation<>Null Then animobj\actualframe=animobj\actualframe+1 If animobj\activeanimation\End<animobj\actualframe Then animobj\activeanimation=Null End If End Function Function IsAnimationActive( animobj.TAnimationObject ) Return animobj\activeanimation<>Null End Function Function GetAnimationLength( anim.TAnimation ) Return anim\End-anim\from End Function Download-Link(mit Beispielen): https://www.blitzforum.de/upload/file.php?id=11632 Vielleicht baue ich noch Loops und sowas ein, wenn es mein Spiel benötigt, oder der Druck der Community zu groß wird. Ich hoffe, dass es nichts ausmacht, dass ich bei den Beispielen eine Animation vom derzeit laufenden BAC genommen habe.(entschuldigung an JOo) Viel Spass damit Lg Freak123 |
||
PacMani |
Mi, Apr 11, 2012 18:51 Antworten mit Zitat |
|
---|---|---|
Sehr schön Kommt mir außerdem bekannt vor: Hier zu dem Thema mal meine nie ganz (das letzte Prozent von 99% fehlt) fertiggestellte Animations-Bb. Wollte ich mal separat posten. Aber das passt sich hier ja auch ganz super.
Code: [AUSKLAPPEN] ;Animation ########################################################################################
Type Animation Field AnimImage ;Das zugehörige Animationsbild Field Kind ;Der Animationstyp Field FrameStart ;Der Index des ersten Frames (Offset) Field FrameCount ;Anzahl aller Frames Field FrameCurrent# ;Der Index des aktuellen Frames Field FrameSpeed# ;Geschwindigkeit der Animation Field Loop ;Wiederholt sich die Animation? Field Stopped ;Gibt an, ob die Animation noch läuft End Type ;Variablen & Konstanten =========================================================================== ;Bemessungen -------------------------------------------------------------------------------------- Global FrameDelay ;Dauer in Millisekunden zwischen Framewechsel Global FrameTimer ;Aktueller Zähler für Framewechsel Global FrameElapsedCount ;Anzahl hochgerechneter Frames für externe Anwendung ;Animationstypen ---------------------------------------------------------------------------------- Const KndAnimationForward = 1 ;Vorwärtslaufende Animation Const KndAnimationBackward = 2 ;Rückwärtslaufende Animation Const KndAnimationAlternate = 4 ;Hin- und herlaufende Animation ;Funktionen ======================================================================================= ;Richtet den Animationszeitgeber ein -------------------------------------------------------------- Function InitializeAnimations(TimerDelay) FrameDelay = TimerDelay FrameTimer = StartTime - 1 End Function ;Aktualisiert alle Animationen -------------------------------------------------------------------- Function UpdateAnimations() FrameElapsedCount = 0 While StartTime > FrameTimer FrameTimer = FrameTimer + FrameDelay FrameElapsedCount = FrameElapsedCount + 1 Local FoundAnimation.Animation For FoundAnimation = Each Animation UpdateAnimation(FoundAnimation) Next Wend End Function ;Erstellt eine Animation -------------------------------------------------------------------------- Function CreateAnimation.Animation(AnimImage, Kind, FrameCount, FrameStart = 0, FrameSpeed# = 1, Loop = True) Local NewAnimation.Animation = New Animation NewAnimation\AnimImage = AnimImage NewAnimation\Kind = Kind NewAnimation\FrameStart = FrameStart NewAnimation\FrameCount = FrameCount NewAnimation\FrameSpeed = FrameSpeed NewAnimation\Loop = Loop Return NewAnimation End Function ;Aktualisiert eine Animation ---------------------------------------------------------------------- Function UpdateAnimation(Instance.Animation) ;Wenn Animation beendet wurde, keine Aktualisierungen mehr durchführen If Instance\Stopped Then Return End If ;Nächsten Frame berechnen Select Instance\Kind Case KndAnimationForward Instance\FrameCurrent = Instance\FrameCurrent + Instance\FrameSpeed If Instance\FrameCurrent >= Instance\FrameCount - 1 Then If Instance\Loop Then Instance\FrameCurrent = (Instance\FrameCurrent + Instance\FrameSpeed) Mod Instance\FrameCount Else Instance\FrameCurrent = Instance\FrameCount - 1 Instance\Stopped = True End If End If Case KndAnimationBackward Instance\FrameCurrent = Instance\FrameCurrent - Instance\FrameSpeed If Instance\FrameCurrent <= 0 Then If Instance\Loop Then Instance\FrameCurrent = Instance\FrameCount - 1 Else Instance\FrameCurrent = Instance\FrameStart Instance\Stopped = True End If End If Case KndAnimationAlternate If Instance\FrameCurrent >= Instance\FrameCount - 1 Then If Instance\Loop Then Instance\FrameCurrent = -Instance\FrameCurrent Else Instance\Stopped = True End If End If Instance\FrameCurrent = Instance\FrameCurrent + Instance\FrameSpeed End Select End Function ;Zeichnet eine Animation mit Transparenzmaske ----------------------------------------------------- Function DrawAnimation(Instance.Animation, X, Y) DrawImage(Instance\AnimImage, X, Y, Abs(Instance\FrameCurrent) + Instance\FrameStart) End Function ;Zeichnet eine Animation ohne Transparenzmaske ---------------------------------------------------- Function DrawAnimationBlock(Instance.Animation, X, Y) DrawBlock(Instance\AnimImage, X, Y, Abs(Instance\FrameCurrent) + Instance\FrameStart) End Function ;Zeichnet einen Ausschnitt einer Animation mit Transparenzmaske ----------------------------------- Function DrawAnimationRect(Instance.Animation, X, Y, RectX, RectY, RectWidth, RectHeight) DrawImageRect(Instance\AnimImage, X, Y, RectX, RectY, RectWidth, RectHeight, Abs(Instance\FrameCurrent) + Instance\FrameStart) End Function ;Zeichnet einen Ausschnitt einer Animation ohne Transparenzmaske ---------------------------------- Function DrawAnimationBlockRect(Instance.Animation, X, Y, RectX, RectY, RectWidth, RectHeight) DrawBlockRect(Instance\AnimImage, X, Y, RectX, RectY, RectWidth, RectHeight, Abs(Instance\FrameCurrent) + Instance\FrameStart) End Function ;Löscht eine Animation ---------------------------------------------------------------------------- Function DeleteAnimation(Instance.Animation) Delete Instance End Function |
||
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group