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? :lol:

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.