Animationen / Frames unterschiedlich groß

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

funkmaster5000

Betreff: Animationen / Frames unterschiedlich groß

BeitragDi, Dez 15, 2015 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebe Community,

im Moment versuche ich mich ein bisschen an dem Thema Animation und habe eine State Machine, die anhand der Spielereingaben die Frames/Offset ermittelt. Für meine Kollisionsabfrage muss die Animation mittels MidHandle() vorliegen.

Nun sind die Frames der Animation leider unterschiedlich groß. Das Problem dürfte bekannt sein: das Bild zeigt die Spielfigur nach rechts gewandt. Spiegelt man das Bild, um auch den Blick nach links darzustellen, steht die Figur plötzlich weiter rechts als ursprünglich und umgekehrt. Eine Lösung, die ich versucht habe, ist das Bild pixelgenau zu grabben und in einem Array zu speichern. Bis dato dachte ich, dass es so funktionieren könnte, aber kaum habe ich die letzte Animation hinzugefügt, ist das nicht mehr der Fall, sondern das o.g. Problem tritt erneut auf. Soll (bzw. muss) ich mich wirklich an dem breitesten Bild orientieren, die Vorlage doppelt so groß machen und alles zentrieren? Ist das nicht eine riesen Platzverschwendung für die kleineren Bilder? Andererseits könnte ich so mit LoadAnimImage() arbeiten. Hattet ihr schon einmal ähnliche Probleme und ggf. eine elegantere Lösung/Idee?

Gerade mache ich so gute Fortschritte mit der Tastaturabhängigen Animation, dass ich ungerne aufgeben möchte Confused

Danke im Voraus!

Hier mal die Animation an sich:
user posted image

DAK

BeitragDi, Dez 15, 2015 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde die einzelnen Frames immer exakt gleich groß machen. Ansonsten kriegst du andauernd solche Probleme. Ist aber kein Problem, mit der Platzverschwendung, solange du PNG verwendest und nicht BMP. PNG komprimiert dir die leeren Flächen sehr gut weg. Kostet beinahe keinen Speicherplatz.
Gewinner der 6. und der 68. BlitzCodeCompo
 

funkmaster5000

BeitragDi, Dez 15, 2015 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine Antwort! Ich will natürlich, dass die Performance gut ist Smile

Schwierig wird es dann denke ich auch mit den blitzinternen Kollisionsabfragen. Werde dann lieber auf Überschneidung von 2 Rechtecken prüfen.

Könnte man das Sprite Sheet auch einfach mehrdimensional machen, oder müssen die Bilder in einem großen Strip hintereinander stehen. Das frage ich mich schon die ganze Zeit Rolling Eyes

Holzchopf

Meisterpacker

BeitragDi, Dez 15, 2015 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Die können auch zweidimensional angeordnet sein. Die Frames sind dann "in Leserichtung" durchnummeriert.
Und ja, Rechteck-Kollisionsprüfung ist zu empfehlen. Ist auch besser als Pixel-genaue Kollisionsprüfung, weil:
1. ImagesCollide nicht mehr voll unterstützt wird.
2. Gerade wenn du mit Animationen arbeitest, unlogisch scheinende Kollisionen auftreten können (zum Beispiel beim entlanglaufen an einer Wand, wenn dann plötzlich die Spitze des Schwertes die Wand berührt und dies mitten im Schritt).

MfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

BladeRunner

Moderator

BeitragMi, Dez 16, 2015 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Jop, alles gleich groß machen, die paar leeren Pixel werden eine Gigabyte große Maschine nicht ins Schwitzen bringen.
Wichtig ist halt dass Du bei der Animation dann für jedes Frame einen Offset hinterlegst, damit die Figur sich nicht hin und her schiebt Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

funkmaster5000

BeitragMi, Dez 16, 2015 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die weiterführenden Informationen, Holzchopf und Blade Runner! Was mich ein bisschen verwundert ist der erste Punkt. Ich habe das schon öfter hier im Forum gelesen (und in der Hilfe natürlich), aber im englischen Sprachraum ist mir das noch nicht begegnet.

DAK

BeitragMi, Dez 16, 2015 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ImagesCollide ist böse. Das war es schon recht von Anfang an (weil es extrem lahm war), ist aber immer schlimmer geworden (macht öfters mal recht zufällig einen Memory Access Violation). Also nicht so gut.

Am Besten machst du die Kollision unabhängig vom Bild. Also machst du z.B. eine Kollisionsbox rund um den Teil des Bildes, in dem sich dein Charakter befindet (mach diese ein wenig kleiner als den Charakter, dann fühlt sich das Spiel fairer an). Dann mach, wenn benötigt (z.B. für Angriffe), eine zweite Kollisionsbox, gegen die du dann den Angriff prüfst. Das macht generell mehr Sinn. Auf diese Weise kriegst du z.B. keinen Schaden, wenn dir jemand während du einen Angriff machst, auf dein Schwert schlägt, und gleichzeitig triffst du beim Angriff nicht den Gegner mit deinem Hintern, sondern nur mit dem Schwert.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group