Hello!
I have a problem with CollideImage and the return object array.
This code in the Method Test_Collision2() throws
an error:
Local temp_ball:Tball
temp_ball = Tball(anz_collisions[x])
I think it wrong Casting.
How can i do it right?
Help welcomed
Greetings
sky009
I have a problem with CollideImage and the return object array.
This code in the Method Test_Collision2() throws
an error:
Local temp_ball:Tball
temp_ball = Tball(anz_collisions[x])
I think it wrong Casting.
How can i do it right?
Help welcomed
Greetings
sky009
Strict Const C_WIDTH = 1024 Const C_HEIGHT = 768 Const C_ANZBALL = 100 Const C_ANZBALL_TYP = 1 Graphics C_WIDTH, C_HEIGHT, 32 Local current:Int, old_FPS_time:Int, FPS:Int, CurrentFPS:Int Type Tball Field ball:timage Field x:Float Field y:Float Field dx:Float Field dy:Float Field sp:Float Method New() ball = temp_image x = Rand(C_WIDTH - 24) y = Rand(C_HEIGHT - 24) dx = Rndfloat() 'Float random zwischen 0 und ... dy = Rndfloat() 'hans.f=Random(8)/10+0.4 sp = Rndfloat() * 2 + 0.3 End Method Method Move() x = x + dx * sp y = y + dy * sp End Method Method Test_Screen_Limit() If y < 0 Then dy = 1 If y > C_HEIGHT - 24 Then dy = -1 If x < 0 Then dx = 1 If x > C_WIDTH - 24 Then dx = -1 End Method Method Test_Collision() For Local temp_ball:Tball = EachIn ballList If temp_ball <> Self ResetCollisions CollideImage temp_ball.ball, temp_ball.x, temp_ball.y, 0, 0, 1 If CollideImage(ball, x, y, 0, 1, 0) If x < temp_ball.x dx = -1 temp_ball.dx = 1 EndIf If x > temp_ball.x dx = 1 temp_ball.dx = -1 EndIf If y < temp_ball.y dy = - 1 temp_ball.dy = 1 EndIf If y > temp_ball.y dy = 1 temp_ball.dy = -1 EndIf EndIf EndIf Next End Method Method Test_Collision2() Local anz_collisions:Object[] ResetCollisions For Local temp_ball:Tball = EachIn ballList If temp_ball <> Self 'Write to Writemask CollideImage temp_ball.ball, temp_ball.x, temp_ball.y, 0, 0, 1 EndIf Next 'Test Collision anz_collisions = CollideImage(ball, x, y, 0, 1, 0) If anz_collisions For Local x = 0 To Len(anz_collisions) -1 Local temp_ball:Tball temp_ball = Tball(anz_collisions[x]) If x < temp_ball.x dx = -1 temp_ball.dx = 1 EndIf If x > temp_ball.x dx = 1 temp_ball.dx = -1 EndIf If y < temp_ball.y dy = - 1 temp_ball.dy = 1 EndIf If y > temp_ball.y dy = 1 temp_ball.dy = -1 EndIf Next EndIf End Method End Type ' Create Ball Image SetClsColor 0, 0, 0 SetMaskColor 0, 0, 0 SetColor 0, 0, 255 DrawOval 100,100, 24,24 Global temp_image:timage = CreateImage(24, 24) GrabImage temp_image, 100, 100 ' Create Ball List Global ballList:TList = CreateList() Local x:Int For x = 1 To C_ANZBALL Local temp_ball:Tball = New Tball ListAddLast ballList, temp_ball Next SetColor 255, 255, 255 While Not KeyDown(KEY_ESCAPE) Cls For Local ball:Tball = EachIn ballList DrawImage ball.ball, ball.x, ball.y ball.Move ball.Test_Screen_Limit ball.Test_Collision2 Next 'Test FPS current = MilliSecs() If current >= old_fps_time + 1000 old_fps_time = current FPS = CurrentFPS CurrentFPS = 1 Else CurrentFPS = CurrentFPS + 1 EndIf DrawText "Balls: " + C_ANZBALL +" FPS: " + FPS, 100, 100 Flip FlushMem Wend