FOREACH & X_COLLISION

Previous topic - Next topic

WPShadow

Hi!

X_COLLISION funktioniert super, da? hei?t, bis man es mit FOREACH verbindet.

Sobald beides zusammen arbeiten soll, reagiert X_COLLISION erst auf das letzte Objekt das erstellt wurde!

In meinem 3D - Test, den ich gemacht habe verh?lt es sich folgenderma?en:

- auf den 1. Schuss wird gar nicht reagiert
- auf Sch?sse dazwischen wird reagiert
- auf den letzten Schuss wird widerum nicht reagiert

Bei meinem Alpha - Test von LR reagiert es genauso, wobei hier nur auf den letzten der Sch?sse reagiert wird, wenn ich FOREACH nutze.

Ich habe mal so nebenbei ein kleines Beispiel gemacht, das es ziemlich anschaulich darstellt!

Gru?

W.

PS.: Das Beispiel ist frei nach Schranz0r's Schusstest mit Types kopiert!

[attachment deleted by admin]
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

WPShadow

#1
UPDATE:

Nachdem ich das Ganze jetzt ausgiebig getestet habe, ergibt sich der selbe Fehler sowohl mit FOREACH, als auch mit FOR/NEXT und BOUNDS.

Weiters ist mir in meinem Projekt aufgefallen, da? rein optisch X_COLLISION (und auch AABB) eine R?ckmeldung des Treffers liefern, jedoch keinen Wert zur?ck geben!

"col" bleibt 0 bis zum letzten Objekt, das einschl?gt! Das widerum wird korrekt zur?ck geliefert!
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Kitty Hello

Du musst X_MOVEMENT _VOR_ X_COLLISION machen. Sonst wei? GLBasic ja nicht _wo_ das Objekt ist.

WPShadow

Habe ich gerade, macht keinen Unterschied! "col" gibt mir keine Reaktion zur?ck, bis der letzte Schuss trifft!
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Mach mal einen einzelnen Schuss!
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Schranz0r

Jo, das Ding wird rot wenns durchfliegt
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Das ja, liefert aber keinen Wert zur?ck!!!
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Kitty Hello

Geht
Code (glbasic) Select

// --------------------------------- //
// Project: Foreach Test
// Start: Wednesday, July 15, 2009
// IDE Version: 6.248


TYPE shot
x
ENDTYPE

LOCAL mx, my, b1, b2

LOCAL newshot AS shot

LOCAL shots[] AS shot

X_LOADOBJ "wurfel.ddd", 0




WHILE TRUE

X_MAKE3D 1, 1000, 45

X_CAMERA 1000, 50, 0, 0, 0, 0

MOUSESTATE mx, my, b1, b2


X_DRAWOBJ 0, 0


IF b1 = 1  AND timer < GETTIMERALL()
newshot.x = 0    //--|

DIMPUSH shots[], newshot // Werte der Positionen übergeben
timer = GETTIMERALL()+500 //Timer höher setzen und verzögerung einfügen!
ENDIF


col=0
FOREACH Check IN shots[] // eine Variable durchdüsen lassen (aktualisieren)
INC Check.x, 10                       //schuss um 2 nach oben versetzen
IF Check.x > 1000 THEN DELETE Check  //wenn schuss y < 0 dann löschen

X_MOVEMENT Check.x, 0, 0
X_DRAWOBJ 0, 0
INC col , X_COLLISION(0, 0, 100, 500, 0, 0)
NEXT

X_MAKE2D

PRINT "Shots: "+BOUNDS(shots[], 0), 0,0
PRINT "Col: "+col, 0,20





SHOWSCREEN

WEND

qed.

WPShadow

#9
Ok, mit INC teste ich mal! Gebe dann morgen bescheid, ob es so geht!

UPDATE:

Teste noch, aber scheinbar scheint alles zu funktionieren!
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est