Hallo alle zusammen, habe folgendes Problem, bei folgendem Code.
TYPE SHOT
x
y
ENDTYPE
TYPE ENEMY
x
y
ENDTYPE
GLOBAL shots[] AS SHOT
GLOBAL enemys[] AS ENEMY
WHILE TRUE
IF b1
LOCAL railgun AS SHOT
railgun.x = playerx+20
railgun.y = playery
delay=GETTIMERALL()+500
DIMPUSH shots[], railgun
ENDIF
LOCAL soldier1 AS ENEMY
soldier1.x = 100
soldier1.y = 100
DIMPUSH enemys[], soldier1
FOREACH enemy IN enemys[]
FOREACH shot IN shots[]
IF SPRCOLL(4, shot.x, shot.y, 5, enemy.x, enemy.y)
didhit=TRUE
DELETE shot
ENDIF
NEXT
IF didhit
DELETE enemy
ENDIF
DRAWSPRITE 5, enemy.x, enemy.y
NEXT
FOREACH shot IN shots[]
DEC shot.y, 1
DRAWSPRITE 4, shot.x, shot.y
NEXT
Folgendes Problem, alles funktioniert soweit, nur sobald ich das enemysprite treffe wird das sprite gelöscht, aber der enemy scheint noch da zu sein, denn der schuss bleibt beim sprite hängen. Ich finde den Fehler nicht, würde mich freuen wenn jemand hilft.
Hat jemand einen Fehler gefunden?
zumindest dein DELETE Enemy macht nur innerhalb der FOR-NEXT-Schleife sind, nicht außerhalb. Probier das mal.
Meines erachtens gehört es in die foreach shot. Wie gesagt das sprite verschwindet ja wenn ich es treffe, nur bleiben die schüsse danach an der sprite Position hängen. Ich habe beim shoot em up video von Gernot geschaut, habe es eigentlich genauso gemacht.
Du musst "didhit" am Anfang wieder auf FALSE setzen.
.... äh.. Du machst in jeder Schleife:
DIMPUSH enemys[], soldier1
also hast Du da ewig viele Enemies.
Mach mal:
PRINT LEN(enemys[]), 0,0
SHOWSCREEN
Ach man, hab das didhit=false an jeder Stelle gesetzt, funktioniert aber nicht. Mit Len hast du recht. Da muss irgendwo noch ein Fehler sein. Ich finde ihn nicht.
Endlich, einfach nur nicht in die while-Schleife setzten. Danke Gernot.
Mit an welcher Stelle was gehört, habe ich hier und da immer noch Probleme. Muss daran arbeiten.