Frage zu object[]

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

RW

Betreff: Frage zu object[]

BeitragMo, Jan 17, 2005 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich komme mit den Datentyp object[] nicht so ganz klar.

z.B. bei CollideImage

local collisions:Object[]
anz_collisions = CollideImage(ball, x, y, 0, 1, 0)

Wie Frage ich das Object-array ab, bzw. welchen Datentyp hat es?
Hier z.B. ist ball vom Typ Tball(selbst definiert).

local temp:Tball
temp = anz_collisions[0] funktioniert nicht.
temp = Tball(anz_collisions[0]) funktioniert auch nicht.

Welchen Datentyp hat das Rückgabearray denn nun?

Gruß

RW
 

Dreamora

BeitragMo, Jan 17, 2005 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
object ist ein Typ. Es ist der Basistyp aller Types genauer gesagt. Es stellt eine Referenz auf ein objekt dar, dass man in den gewünschten Type casten kann danach.

Der Array beinhaltet dabei alle kollisionen oder besser die Referenzen auf die Images mit denen kollidiert wurde.

was dein beispiel oben allerdings genau soll ... ich weiss nicht.

du definierst collisions als array und anz_collisions dann um die rückgabe entgegen zu nehmen, was so garnix gibt
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

RW

BeitragMo, Jan 17, 2005 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Sorry Dreamora, war ein Tipfehler (heisst natürlich Local anz_collisions:Object[])

Hier mal ein Codeausschnitt.

Code: [AUSKLAPPEN]


Type Tball

   Field ball:timage
   Field x:Float
   Field y:Float
   Field dx:Float
     Field dy:Float
     Field sp:Float

...

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])

...



Enthält temp_ball nun einen Typ TBall oder ein Image (Timage)?

Gruß

RW
 

Dreamora

BeitragMo, Jan 17, 2005 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
TImage ist da drin, das ist ja auch das was du in die Collisionmask reinschreibst. Etwas anderes kennt es ja nicht.

Man könnte es aber von hand entsprechend erweitern, die sources sind ja verfügbar ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

RW

BeitragDi, Jan 18, 2005 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Lass mal mit den Sources. Bin froh, wenn ich mit dem Standard
klarkomme Smile

Müsste beim unteren Code die IF-Bedingung (If timage...)nicht ziehen??

Wenn ich jetzt nicht kapiere, gehts ins Bett !!!

Gruß

RW


Code: [AUSKLAPPEN]


Strict

Const C_WIDTH = 1024
Const C_HEIGHT = 768

Graphics C_WIDTH, C_HEIGHT, 32


SetMaskColor 0, 0, 0


' Create Ball Image
SetMaskColor 0, 0, 0

SetColor 0, 0, 255
DrawOval   100,100, 24,24
Global ball_image:timage = CreateImage(24, 24)
GrabImage ball_image, 100, 100


Local colls:Object[]

Cls
DrawImage ball_image, 100, 100
DrawImage ball_image, 105, 105

DrawImage ball_image, 110, 110

Flip


ResetCollisions

CollideImage ball_image, 100, 100, 0, 0, 1
CollideImage ball_image, 105, 105, 0, 0, 1
colls = CollideImage(ball_image, 110, 110, 0, 1, 0)
   
If colls
   Print""
   Print Len(colls)
   Print "Collide"
   
   If timage(colls[0]) = ball_image
      Print ""
      Print "Yes"
   EndIf
   
Else
   Print ""
   Print "No Collide"
EndIf

While Not KeyDown(KEY_ESCAPE)
Wend

 

Dreamora

BeitragDi, Jan 18, 2005 1:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe mir das ganze gerade nochma angesehen:

1. Mit dem letzten Parameter könntest du auch TBall objekte übergeben. Bei der rückgabe musst du diese jedoch explizit auf TBall zurückcasten über TBall( ... )


Beim rest werd ich ma schauen ob ich aufgrund des sources das prob finde. bei mir endet das in ner endlos schleife bei den 2 ersten collideimages
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

RW

BeitragDi, Jan 18, 2005 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm,

der letzte Code funktioniert bei mir.

Bis auf die Abfrage des Object Array´s Sad


RW

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group