Problem mit DIMDEL

Previous topic - Next topic

blastar

habe mal mit linkedlists etwas rumprobiert und mir was zusammengebastelt... funktioniert soweit ganz gut aber irgendwie komme ich mit DIMDEL nicht zurecht. es kommt immer der fehler "test.gbas"(31) error : wrong argument type : DIMDEL, arg no: 2 obwohl es eigentlich richtig sein sollte - wo liegt mein fehler???

Code (glbasic) Select
TYPE tSTAR
x; y; gx; gy
ENDTYPE

GLOBAL STARList[] AS tSTAR

SETSCREEN 320,240,0
LIMITFPS 15

WHILE TRUE
ADDSTAR(RND(316), RND(236))
MOVESTAR()
DRAWSTAR()
PRINT LEN(STARList[]), 4, 4
SHOWSCREEN
WEND

FUNCTION DRAWSTAR:
LOCAL b AS tSTAR
FOREACH b IN STARList[]
DRAWRECT b.x, b.y, 4, 4, RGB(255, 255, 255)
NEXT
ENDFUNCTION

FUNCTION MOVESTAR:
LOCAL b AS tSTAR
FOREACH b IN STARList[]
b.x = b.x + b.gx
b.y = b.y + b.gy
IF b.x > 320 OR b.x < -4 OR b.y > 240 OR b.y < -4 THEN DIMDEL STARList[], b
NEXT
ENDFUNCTION

FUNCTION ADDSTAR: x, y
LOCAL b AS tSTAR
b.x = x
b.y = y
b.gx = RND(7)-3.5
b.gy = RND(7)-3.5
DIMPUSH STARList[], b
ENDFUNCTION

Schranz0r

#1
Löschen tust du einen Typeeintrag so :

Code (glbasic) Select
IF b.x > 320 OR b.x < -4 OR b.y > 240 OR b.y < -4 THEN DELETE b

"b" ist hier kein Indexwert des Arrays "STARList[]", sondern eine Instanz die auf "STARList[]" zugreift. 
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

blastar

danke für die schnelle hilfe... :good: ...funtioniert, ich versuchs mal zu verstehen!

Schranz0r

Ist ganz einfach  :grin:

Wenn du in einer FOREACH-Schleife ein Teil löschen willst, dann benutze DELETE und nicht DIMDEL ;)
Das gemerkt, und die Welt ist OK   :good:

Sonnst haste es TOP gemacht!
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