Seite 1 von 1
Plot() oder Box() Projektile
Verfasst: 31.05.2011 17:32
von Coder Pinhead
Hallo,
Ich versuche gerade ein kleineres Spiel zu basteln.
Und stehe gerade vor einem kleinem Problem und zwar Krieg ich es nicht hin was das Projektil nachdem es abgeschossen wurde und das jeweilige Objekt trifft wieder verschwindet und die Taste zum erneuten schießen freigibt. Hat da wer zufällig ein kleines Beispiel Snippet parat?
Danke schon mal im voraus für die Hilfe

.
Grüße,
Re: Plot() oder Box() Projektile
Verfasst: 31.05.2011 20:05
von man-in-black
Hat da wer zufällig ein kleines Beispiel Snippet parat?
hat da wer zufällig seinen bisherigen Code parat?
Auch wenn ich dir einen kleinen Beispielcode bastel, wird es mit sicherheit nicht auf deinen
Fall passen.
Re: Plot() oder Box() Projektile
Verfasst: 01.06.2011 10:41
von Syntacks_Error
Ich hatte es mal so gemacht, wobei da aber nichts mit Taste freigeben ist:
Code: Alles auswählen
Structure kugel
sprite1.i ; Es werden immer zwei Kugelarten erzeugt,
sprite2.i ; das ist eine stärkere als Bonus, angezeigt wird immer nur eine
X.i
Y.i
dX.b
dY.b
EndStructure
Global NewList kugel.kugel()
Structure shipKugelexplosion
X.i
Y.i
kugelTrans.c
EndStructure
Global NewList shipKugelexplosion.shipKugelexplosion()
Procedure newshipKugelexplosion(x,y) ; Erzeugt eine Explosion bei einem Treffer
AddElement(shipKugelexplosion())
shipKugelexplosion()\X = x
shipKugelexplosion()\Y = y
shipKugelexplosion()\kugelTrans = 255
EndProcedure
Procedure freekugel(kugelzahl) ; Kugel wird aus der Liste kugel() und als Sprite gelöscht
kugelzahl = kugelzahl - 1
FreeSprite(kugel()\sprite1)
FreeSprite(kugel()\sprite2)
DeleteElement(kugel())
ProcedureReturn(kugelzahl)
EndProcedure
; Hier dann der Programmlauf:
ForEach kugel()
kugel()\x = kugel()\x + kugel()\dX
kugel()\y = kugel()\y + kugel()\dY
If checkOutside(kugel()\X,kugel()\Y) ; außerhalb des Fensters
kugelzahl = freekugel(kugelzahl) ; Kugel wird gelöscht
Else
If starttimeKugelwirkungdauer ; Alternativ stärkere Kugel als Bonus für gewisse Zeit
DisplaySprite(kugel()\sprite2,kugel()\x-3,kugel()\y-3)
Else
DisplaySprite(kugel()\sprite1,kugel()\x-5,kugel()\y-5); normale Kugel
EndIf
ForEach feind() ; Kollisionsprüfung
If SpriteCollision(kugel()\sprite1, kugel()\x, kugel()\y, feind()\sprite, feind()\X, feind()\Y)
punkte = punkte + kugeltrefferpunkt
newshipKugelexplosion(feind()\X + feindwidth/2,feind()\Y + feindheight) ; Kugel explodiert
kugelzahl = freekugel(kugelzahl) ; ////////////////////Kugel wird bei Treffer gelöscht, s.u.
gesamtkugeltreffer = gesamtkugeltreffer + 1
feind()\schirmstatus = feind()\schirmstatus + kugelwirkung
If feind()\schirmstatus > feindtot
newfeindexplosion( feind()\X,feind()\Y)
PlaySound(feindexplosionwav)
freefeind(feind()\sprite,feindexplosionwav)
punkte = punkte + feindzerstoertpunkt
gesamtfeindzerstoerte = gesamtfeindzerstoerte + 1
createfeind(Random(feindtypen),feindschirm,displayTransMin,feindXwegRadius)
EndIf
Break
EndIf
Next
EndIf
Next
Es wird also einfach die Liste aller Kugeln durchlaufen und bei einer Kollision das Listenelement mit der Kugel und das entsprechende Sprite gelöscht. Ob so etwas die übliche Vorgehensweise ist oder ob man es viel besser machen kann, weiß ich allerdings nicht.
Bei Bedarf kann ich auch das ganze Programm reinstellen, sind nur so 1500 Zeilen.
Re: Plot() oder Box() Projektile
Verfasst: 01.06.2011 18:13
von The Shark
Eigentlich solte es reichen die Sprites einmal Global zur Verfügung zu stellen, die müssen nicht für jedes Projektil extra erstellt werden.