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???
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
Löschen tust du einen Typeeintrag so :
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.
danke für die schnelle hilfe... :good: ...funtioniert, ich versuchs mal zu verstehen!
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!