Explosionsanimation mit Sprites

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

dont_know_to_use

Betreff: Explosionsanimation mit Sprites

BeitragDi, Okt 11, 2011 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Ich bin in meinem Spiel "Fleets of the Masters" nun soweit, dass ich die Raumkämpfe realisieren möchte. Das die Schiffe auf einander schießen sieht auch schon ganz gut aus, allerdings fliegen die Schüsse durch die Schiffe hindurch ohne Explosion. Ich habe einige Explosionssprites erhalten, welcher in schneller Reigenfolge hintereinander angezeigt werden sollen, eine Animation halt. Nun stellt sich mir folgende Frage: Wie zeige ich diese Animation an der Position an, an der die Laserschüsse auf das Raumschiff treffen?

Ich dachte an etwas dieser Art(Pseudocode):
BlitzBasic: [AUSKLAPPEN]
If Collided(Laser,Raumschiff) Then
PositionEntity ExplosionSprite(1),CollidedXYZ
;Warte kurz
PositionEntity ExplosionSprite(1),Ganzweitweg
PositionEntity ExplosionSprite(2),CollidedXYZ
;Warte kurz
PositionEntity ExplosionSprite(2),Ganzweitweg
PositionEntity ExplosionSprite(3),CollidedXYZ

...

EndIf

Wie genau finde ich jetzt heraus, wo die Laser auf das Schiff eintreffen? Und Wie schaffe ich es, dass die Animation korrekt angezeigt wird? Also, dass nicht alle Sprites auf einmal da sind, sondern erst das erste Sprite an dieser Position gezeigt wird, dieses dann verschwindet, dann das zweite Sprite, das verschwindet, dann das dritte ... und so weiter?

mfg, dont_know Wink

ToeB

BeitragDi, Okt 11, 2011 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erstmal kannst du über LoadAnimTexture und EntityTexture dem Sprite verschiedene Frames übergeben.

Für das herausfinden, benutz du einfach CollisionX / Y / Z bzw vorher CountCollisions

Möchtest du aber die Locale Position der Kollision am Raumschiff selber, so musst du es mit TFormPoint umwandeln :

BlitzBasic: [AUSKLAPPEN]
TFormPoint(CollisionX(schuss,0), CollisionY(schuss,0),CollisionZ(schuss,0), 0, schiff_entity)
TrefferX = TFormedX()
TrefferY = TFormedY()
TrefferZ = TFormedZ()



mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

bjh

BeitragDi, Okt 11, 2011 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

ich programmiere zurzeit einen egoshooter.

wenn meine kugeln auf dem boden ankommen, werden "grasspritzer" an der kollisionsposition der kugel erstellt und senkrecht gedreht.

ich würde also einfach bei kollision dieses explosions-sprite an position des lasers abspielen lassen.
ich finde diese methode ganz gut und einfach. Wink

ToeB

BeitragMi, Okt 12, 2011 0:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach? - Ja. Gut? - Leider nein.

Edit: Was hier drunter steht keine allzu große Beachtung schenken, ich hatte dich ein wenig missverstanden Confused

Denn für deinen Fall (Egoshooter), macht es einfach keinen Sinn, Kugeln fliegen zu lassen. Lieber EntityPick bzw. CameraPick benutzen und dort dann die Graßspritzer erstellen.

Für seinen Fall: Warum sollte die Explosion schon mit dem Geschoss mitfliegen ? Ist einfach unnötige Rechenleistung die da verbraucht würde. Stell dir mal vor es würde nicht nur ein Raumschiff mit einem Schuss auf ein anderes Ballern, sondern 15 Schiffe mit etwa 10 Schuss / Sekunde. Dann allein die Geschosse (Laserstrahlen? Rakten?) zu "Zeichnen" dauert schon, aber dann noch extra ein Sprite mit zu schicken ? Villeicht trifft der Schuss ja gar nicht und die Explosion wurde umsonst mitgeschickt ?

Daher: Es ist besser die Explosion auch nur da zu erstellen und abzuspielen wo auch wirklich eine hinsoll, und zwar dann wenn ein Schuss auf das Schiff trifft (Schuss löschen, Explosion erstellen).

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Midimaster

BeitragMi, Okt 12, 2011 1:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Lies mal das Timer-Tutorial: https://www.blitzforum.de/foru...hp?t=34436

und zwar das Kapitel III
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

bjh

BeitragMi, Okt 12, 2011 1:37
Antworten mit Zitat
Benutzer-Profile anzeigen
midimaster meinst du mich?

ich versuche mal zu erklären, wie ich das mache:

die kugel fliegt und wird nach 1.6 sekunden gelöscht, wenn es keine kollision gab.
bei kollision wird an der stelle der kugel der erdspritzer erstellt und die kugel hat eine längere lebensdauer von 10 sekunden.
der erdspritzer verschwindet nach 0.33 sekunden
danach wird alles schön sauber wieder gelöscht.
also fliegt nichts mit der kugel mit, sondern wird nur erstellt, wenn es eine kollision mit dem boden gab.

und so performance lastig ist das auch wieder nicht, weil normalerweise niemand 100 kugeln pro sekunde abfeuert. Wink

Midimaster

BeitragMi, Okt 12, 2011 2:14
Antworten mit Zitat
Benutzer-Profile anzeigen
nee, eigentlich ging das an den Thema-Autor dont_know_to_use und betraf seine Frage wie man den die Spriteanimation zeitlich bremsen kann
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

dont_know_to_use

BeitragMi, Okt 12, 2011 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch. Das Timer-Tutorial hat geholfen. Wink

mfg

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group