HELP! Swaping Sprites

BlitzMax Forums/BlitzMax Beginners Area/HELP! Swaping Sprites

BlackSp1der(Posted 2006) [#1]
I need help with my code. I want to swap 2 sprites in screen. the sprites have increasing acceleration, so is difficult to calculate the movement.
here's my example code:

Strict

Const CENTERX:Int=400
Const CENTERY:Int=300
Graphics CENTERX*2,CENTERY*2,0

Global Object1:TObject=New TObject
		Object1.Name="Object1"
		Object1.X=CENTERX-100
		Object1.Y=CENTERY-120

Global Object2:TObject=New TObject
		Object2.Name="Object2"
		Object2.X=CENTERX+100
		Object2.Y=CENTERY+120

While Not KeyHit(KEY_ESCAPE)
	Cls
	If MouseHit(1) And Object1.Swap=False And Object2.Swap=False Then SwapObjects(Object1,Object2)
	Object1.Update
	Object2.Update

	Object1.Draw
	Object2.Draw
	Flip
Wend


Type TObject
	Field Name:String
	Field X:Double
	Field Y:Double
	Field AcelX:Float=0
	Field AcelY:Float=0
	Field AcelInc:Float=0.32
	Field AcelTop:Float=8

	Field CheckX:Int
	Field TargetX:Int
	Field TargetY:Int
	Field Swap:Int
	Field Move:Int

	Field StepX:Float=1
	Field StepY:Float=1


	Method Update()
		'increasing acceleration
		If Move Then
			If CheckX Then
				If Abs(X-TargetX) <= Abs(AcelX*AcelX)/0.19 Then Move=False; Return
			Else
				If Abs(Y-TargetY) <= Abs(AcelY*AcelY)/0.19 Then Move=False; Return
			EndIf
			If TargetX<X Then AcelX:-AcelInc; If Abs(AcelX)>AcelTop Then AcelX:+AcelInc
			If TargetX>X Then AcelX:+AcelInc; If Abs(AcelX)>AcelTop Then AcelX:-AcelInc
		
			If TargetY<Y Then AcelY:-AcelInc; If Abs(AcelY)>AcelTop Then AcelY:+AcelInc
			If TargetY>Y Then AcelY:+AcelInc; If Abs(AcelY)>AcelTop Then AcelY:-AcelInc
		EndIf

		X:+AcelX*StepX
		Y:+AcelY*StepY
		'decreasing acceleration
		If AcelX>0 Then
			AcelX:-0.1; If AcelX<0 Then AcelX=0
		Else
			If AcelX<0 Then
				AcelX:+0.1; If AcelX>0 Then AcelX=0
			EndIf
		EndIf
		If AcelY>0 Then
			AcelY:-0.1; If AcelY<0 Then AcelY=0
		Else
			If AcelY<0 Then
				AcelY:+0.1; If AcelY>0 Then AcelY=0
			EndIf
		EndIf
		If Swap And (AcelX=0 Or AcelY=0) Then StepX=1; StepY=1; Swap=False; Return

	EndMethod

	Method Draw()
		SetColor 0,0,255
		DrawOval X-10,Y-10,20,20
		SetColor 255,255,255

		DrawText Name,X-30,Y+10
		DrawText "X: "+X,X-70,Y+20
		DrawText "Y: "+Y,X-70,Y+30
	EndMethod
EndType

Function SwapObjects(obj1:TObject Var,obj2:TObject Var)
	obj1.TargetX=obj2.X
	obj1.TargetY=obj2.Y
	obj1.Swap=True
	obj1.Move=True
	obj1.StepX=Abs(obj1.X-obj1.TargetX)
	obj1.StepY=Abs(obj1.Y-obj1.TargetY)
	If object1.StepX > object1.StepY Then
		obj1.StepY=obj1.StepY/obj1.StepX
		obj1.StepX=1
		obj1.CheckX=True
	Else
		obj1.StepX=obj1.StepX/obj1.StepY
		obj1.StepY=1
		obj1.CheckX=False
	EndIf


	obj2.TargetX=obj1.X
	obj2.TargetY=obj1.Y
	obj2.Swap=True
	obj2.Move=True
	obj2.StepX=Abs(obj2.X-obj2.TargetX)
	obj2.StepY=Abs(obj2.Y-obj2.TargetY)
	If obj2.StepX > obj2.StepY Then
		obj2.StepY=obj2.StepY/obj2.StepX
		obj2.StepX=1
		obj2.CheckX=True
	Else
		obj2.StepX=obj2.StepX/obj2.StepY
		obj2.StepY=1
		obj2.CheckX=False
	EndIf

EndFunction