With Delta Time should Keys and Draw be seperate

BlitzMax Forums/BlitzMax Beginners Area/With Delta Time should Keys and Draw be seperate

dothedru22(Posted 2006) [#1]
I'm sortof confused on this. I got a delta time routine on this site. I'm not even sure if delta is the best way to go. I've only found a thousand topics on it. Like in allegro the way I set up the time the keyboard and logic was seperate from the drawing. So im wandering if I do the same with delta. Its very jumpy now with both of them in the same loop.. Its set up like this.

While (Not KeyHit(KEY_ESCAPE))
	
	DLT_RefreshDLT()

	DLT_MyAppDelta.SetNewFPS(65.0)

		
	If (DLT_MyScreenUpdate > DLT_MyAppRefresh) Then
	
		Cls()
	
		DLT_UpdateScreen(DLT_MyScreenUpdate , player)
		
		DLT_MyScreenUpdate = DLT_MyScreenUpdate - DLT_MyAppRefresh
		
		Flip(False)		
		
	EndIf	
Wend

Function DLT_UpdateScreen(DeltaTime:Float = 1 , pl:Player_T)
	
	Local DLT_GetDeltaFPS = DLT_MyAppDelta.GetDeltaFPS()
	Local DLT_GetRealFPS = DLT_MyAppDelta.GetRealFPS()
	
	pl.UpdateDraw()
	pl.UpdateLogic(DeltaTime)
	pl.UpdateKeyboard(DeltaTime)
	
	DrawText("FPS : "+DLT_GetRealFPS , 0 , 0)
End Function


Type Player_T 

	Field x:			Float
	Field y:			Float
	Field img:			TImage
	Field frame:		Int
	Field animTimer:	Int = MilliSecs()
	Field animSpeed:	Int = 150
	Field walk:			Byte
	Field stand:		Byte = 0
	Field walkFwd:		Byte = 1
	Field walkBack:		Byte = 2
	Field walkRight:	Byte = 3
	Field walkLeft:		Byte = 4
	
	Method CreatePlayer(x:Float , y:Float)	
		
		self.x = x
		self.y = y
		self.walk = walkFwd				
	End Method
	
	Method UpdateDraw() 
	
		self.AnimateUpdate()	
		DrawImage(self.img , x , y , self.frame)				
	End Method
	
	Method UpdateLogic(deltTime:Float)
	
	End Method	
		
	Method UpdateKeyboard(deltTime:Float)
		
		Select self.walk
		
			Case (KeyDown(KEY_UP)) 
				
				self.walk = walkFwd
				self.y :- (1.5 * deltTime)
				
			Case (KeyDown(KEY_DOWN)) 
				
				self.walk = walkBack
				self.y :+ (1.5 * deltTime)
			
			Case (KeyDown(KEY_RIGHT))
			
				self.walk = walkRight
				self.x :+ (1.5 * deltTime)
			
			Case (KeyDown(KEY_LEFT))
			
				self.walk = walkLeft
				self.x :- (1.5 * deltTime)		
			
			Default self.walk = stand
			
		End Select				
	End Method	
	
	Method AnimateUpdate()
	
		Select self.walk
		
			Case walkFwd
				
				self.WalkFwdAnimate()
				
			Case walkBack
				
			Case walkRight
						
			Case walkLeft
			
			Default self.frame = 0
				
		End Select	
			
	End Method
	
	Method WalkFwdAnimate()
	
		If ((MilliSecs() - animTimer) > animSpeed)
			
			animTimer = MilliSecs()
			self.frame :+ 1			
		EndIf
				
		If (self.frame > 1) self.frame = 0			
	End Method	
End Type


its just what im working with now. Not sure if this is even the best method. Thanks for any help.


Grey Alien(Posted 2006) [#2]
yep 100% all logic should be separate from drawing.


Steve Elliott(Posted 2006) [#3]
Controlling speed (and smoothness) across a million PC's, for various games is the bane of the PC programmer.

Save yourself the effort by either searching for the Retro64 method. Or buy Grey's BlitzMax Framework, which has a built-in and improved version amongst other features.