Animation-Lib
Übersicht

Freak123Betreff: Animation-Lib |
![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sehr schön ![]() 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


Powered by phpBB © 2001 - 2006, phpBB Group