Syntax
Value.d = Transition_EaseInElastic(t.d, b.d, c.d, d.d, amplitude.d=1, period.d=0.3)Description
Calculates an intermediate value using an elastic easing curve that simulates an object overshooting and oscillating around the start value before moving towards the end value (ease-in).
Parameters
t.d
The current elapsed time of the animation in milliseconds.
b.d
The starting value of the property being animated.
c.d
The total change in value (target value - starting value).
d.d
The total duration of the animation in milliseconds.
amplitude.d (optional)
A factor controlling the amplitude (height) of the elastic oscillations.
Default is 1.
period.d (optional)
Controls the frequency of the oscillations. Smaller values result in
more oscillations. Default is 0.3.
Return Value
Returns the interpolated value (Double) at the current time `t` according to the ease-in elastic curve.
Example
IncludeFile "ProGUI_PB.pbi"
Structure MyAnimData
TargetValue.d
StartValue.d
x.d
EndStructure
Procedure DrawHandler(Window, EventType, *EventData.PG_EventDraw, *UserData.MyAnimData)
DrawClear(RGB(200, 200, 200), 1) ; Grey background
; Draw a box whose X position is animated
DrawBox(*UserData\x, (*EventData\height / 2) - 25, 50, 50, RGB(0, 0, 255))
EndProcedure
Procedure AnimateHandler(Window, EventType, *EventData.PG_EventAnimate, *UserData.MyAnimData)
Select *EventData\state
Case #PG_Event_Animate_Start
Debug "Animation started."
Case #PG_Event_Animate_Update
; Calculate intermediate value using the ease-in-elastic transition
*UserData\x = Transition_EaseInElastic(*EventData\currentTime, *UserData\StartValue, *UserData\TargetValue - *UserData\StartValue, *EventData\duration)
; Optional: *UserData\x = Transition_EaseInElastic(..., ..., ..., ..., 1.2, 0.2) ; Higher amplitude, more frequent oscillation
WindowRedraw(Window)
Case #PG_Event_Animate_End
Debug "Animation ended"
; Ensure final value is set exactly
*UserData\x = *UserData\TargetValue
WindowRedraw(Window)
EndSelect
EndProcedure
StartProGUI()
MyWindow = CreateWindow(0, 0, 300, 200, "Transition_EaseInElastic Example")
If MyWindow
; Setup data for animation
*AnimData.MyAnimData = AllocateStructure(MyAnimData)
*AnimData\StartValue = 10
*AnimData\TargetValue = 200
AddEventHandler(MyWindow, #PG_Event_Draw, @DrawHandler(), *AnimData)
AddEventHandler(MyWindow, #PG_Event_Animate, @AnimateHandler(), *AnimData)
; Start a 2-second animation
AnimID = StartAnimation(MyWindow, #PG_Any, 2000)
WindowShow(MyWindow, #True, #PG_WindowShow_ScreenCentered)
Repeat : Event = WaitWindowEvent() : Until Event = #PB_Event_CloseWindow
StopAnimation(MyWindow, AnimID)
FreeStructure(*AnimData)
EndIf
StopProGUI()See Also
Transition_EaseOutElastic, Transition_EaseInOutElastic, Transition_EaseOutInElastic, StartAnimation
Supported OS
Windows, Linux