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:
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