Returned object array and Collide image

BlitzMax Forums/BlitzMax Beginners Area/Returned object array and Collide image

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

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





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