I need to leave a game loop which uses render tweening for a while and go into another loop which doesn't use any render tweening. When I return, if the non-tweening loop has taken a while, it messes up the tweening as the tweening tries to catch up. I've a feeling I just need to reset a couple of variables. I'm using the same setup that Mark used in the Castle demo, so using that, can anyone point out what variables I need to set to what when returning from the non-tweening loop?
Thanks..
Mark's / BlitzSupport's Code :
; ------------------------------------------------------------------
; GameCore -- support@...
; ------------------------------------------------------------------
; The basics of a frame-limited Blitz 3D game, ready to rock
; ------------------------------------------------------------------
; Adapted from Mark Sibly's code
; ------------------------------------------------------------------
; ------------------------------------------------------------------
; Game's frames-per-second setting
; ------------------------------------------------------------------
Global gameFPS = 50
; ------------------------------------------------------------------
; Open 3D display mode
; ------------------------------------------------------------------
Graphics3D 640, 480
; ------------------------------------------------------------------
; Single camera setup
; ------------------------------------------------------------------
cam = CreateCamera ()
CameraViewport cam, 0, 0, GraphicsWidth (), GraphicsHeight ()
; ------------------------------------------------------------------
; General setup
; ------------------------------------------------------------------
; Load and arrange objects, textures, etc here...
; Quick example (just delete this)...
Global box = CreateCube ()
MoveEntity box, 0, 0, 5
; ------------------------------------------------------------------
; Frame limiting code setup
; ------------------------------------------------------------------
framePeriod = 1000 / gameFPS
frameTime = MilliSecs () - framePeriod
Repeat
; --------------------------------------------------------------
; Frame limiting
; --------------------------------------------------------------
Repeat
frameElapsed = MilliSecs () - frameTime
Until frameElapsed
frameTicks = frameElapsed / framePeriod
frameTween# = Float (frameElapsed Mod framePeriod) / Float (framePeriod)
; --------------------------------------------------------------
; Update game and world state
; --------------------------------------------------------------
For frameLimit = 1 To frameTicks
If frameLimit = frameTicks Then CaptureWorld
frameTime = frameTime + framePeriod
UpdateGame ()
UpdateWorld
Next
; --------------------------------------------------------------
; **** Wireframe for DEBUG only -- remove before release! ****
; --------------------------------------------------------------
If KeyHit (17): w = 1 - w: WireFrame w: EndIf ; Press 'W'
; --------------------------------------------------------------
; Draw 3D world
; --------------------------------------------------------------
RenderWorld frameTween
; --------------------------------------------------------------
; Show result
; --------------------------------------------------------------
Flip
Until KeyHit (1)
End
; ------------------------------------------------------------------
; Game update routine, called from frame limiting code
; ------------------------------------------------------------------
Function UpdateGame ()
; Get keypresses, move entities, etc
; EXAMPLE CODE -- REMOVE! Uses cursors...
If KeyDown (203) TurnEntity box, 0, 0.5, 0
If KeyDown (205) TurnEntity box, 0, -0.5, 0
End Function
|