Disabling Key?

BlitzMax Forums/BlitzMax Beginners Area/Disabling Key?

foosh(Posted 2007) [#1]
I have a problem. I'm making a side scrolling shooter, and when I move sideways and jump, everythings fine. However, if I keep holding the spacebar after the character has jumped, the animation of the character will stop. Any suggestions? I'm including my code.

'-------------------------------------------------------------------GAME SETUP

Graphics 510,300,0
Global Gravity:Float = 0.60
Global Position:Int = 2
Global Jumped:Int = 0

Local Background:TBackground = TBackground.Create("background.png",0,0)
Local Player:THero = THero.Create("guywalking.png",15,142)

'--------------------------------------------------------------------MAIN LOOP

Repeat
	Cls
	DrawText "The Big One",200,250
	DrawText "For MacOS X",200,262
	Background.DrawSelf()
	Player.UpdateState()
	Player.DrawSelf()
	Flip
Until KeyDown(KEY_ESCAPE) Or AppTerminate()
End

'----------------------------------------------------------------------TYPES

Type THero
	Field X:Int=15
	Field Y:Int=142
	Field Speed:Int=3
	Field Frame:Int=0
	Field AnimSpeed:Int=3
	Field JumpHeight:Float=10.00
	Field JumpYVel:Float
	Field Image:TImage
	
	Function Create:THero(File:String,xstart:Int,ystart:Int)
		Local WalkImage:THero=New THero
		WalkImage.X=xstart
		WalkImage.Y=ystart
		WalkImage.Frame=animframe
		AutoImageFlags MASKEDIMAGE
		SetMaskColor 255,255,255
		WalkImage.image=LoadAnimImage(LoadBank(File),64,64,0,12,MASKEDIMAGE)
	
		If WalkImage.image=Null
			Print "Image file not found. Quitting..."
			End
		End If
		Return WalkImage
	End Function
	
	Method DrawSelf()
		DrawImage Image,X,Y,Frame
	End Method
	
	Method UpdateState()
		If KeyDown(KEY_LEFT) And Not KeyDown(KEY_RIGHT)
			Position = 1
			If X>-15 Then X:- Speed
			If AnimSpeed < 0 And Not KeyDown(KEY_SPACE)
				If Frame = 2 And Y = 142 Then Frame = 3 Else Frame = 2
				AnimSpeed = 3
			ElseIf KeyDown(KEY_SPACE) And Not KeyDown(KEY_LEFT)
				Frame = 11
			Else
				AnimSpeed:-1
			EndIf
		EndIf
		If KeyDown(KEY_RIGHT)
			Position = 2
			If X<460 Then X:+ Speed
			If AnimSpeed < 0 And Not KeyDown(KEY_SPACE)
				If Frame = 1 And Y = 142 Then Frame = 0 Else Frame = 1
				AnimSpeed = 3
			ElseIf KeyDown(KEY_SPACE) And Not KeyDown(KEY_RIGHT)
				Frame = 6
			Else
				AnimSpeed:-1
			EndIf
		EndIf
		If Position = 1 And KeyHit(KEY_SPACE)
			If Y = 142
				JumpYVel = JumpHeight
				Frame = 11
				Jumped = 1
			EndIf
		EndIf

		If Position = 2 And KeyHit(KEY_SPACE)
			If Y = 142
				JumpYVel = JumpHeight
				Frame = 6
				Jumped = 2
			EndIf
		EndIf
		
		If Jumped = 1
			JumpYVel:-Gravity
			Y:-JumpYVel
			If Y => 142 Then JumpYVel = 0.0; Y = 142
			If Y=142 Then Frame = 3; Jumped = 0
		EndIf
		If Jumped = 2
			JumpYVel:-Gravity
			Y:-JumpYVel
			If Y => 142 Then JumpYVel = 0.0; Y = 142
			If Y=142 Then Frame = 0; Jumped = 0
		EndIf
	End Method
End Type

Type TBackground
	Field X:Int
	Field Y:Int
	Field Image:Timage
	Function Create:TBackground(File:String,xstart:Int,ystart:Int)
		Local Background:TBackground=New TBackground
		Background.X = xstart
		Background.Y = ystart
		Background.image = LoadImage(LoadBank(File))
		
		If Background.image=Null
			Print "Image file not found. Quitting..."
			End
		End If
		Return Background
	End Function
	
	Method DrawSelf()
		DrawImage Image,X,Y,Frame
	End Method
End Type



mothmanbr(Posted 2007) [#2]
If AnimSpeed < 0 And Not KeyDown(KEY_SPACE)
				If Frame = 1 And Y = 142 Then Frame = 0 Else Frame = 1
				AnimSpeed = 3


I think it's because of this. Maybe you should use a flag that says if the char is jumping or not?


foosh(Posted 2007) [#3]
Sorry I'm not familiar with what flags are... you mean just a variable if the char is jumping or not, and if that variable is a certain value, do the following?


JazzieB(Posted 2007) [#4]
Yes, a flag is just a variable that usually, but not always, has one of two values to say whether something is happening or not (usually True or False, or 1 or 0).

Although I've not checked your code myself, it sounds like the animation for your jumping character is getting reset while the spacebar is being held down. This is why you need a flag to stop the animation being reset if the character is already jumping.