IX. Objektanimationen
Nachdem wir nun den Spieler in unserer Map "eingesperrt" haben indem wir ihn mit dieser kollidieren lassen, wird es jetzt auch endlich Zeit dass man ihn sieht und er Animationen besitzt. Laufen wäre eine ausgesprochen angenehme Animation ... gelangweilt auf die nächste Aktion des Spielers warten aber auch!
DER ZWEITE VOR DEM ERSTEN SCHRITT
Im Hauptmenü von ™REDPILL findest Du den Button "Animations". Hier werden die Animationen für alle Objekte Deines Spiels definiert -- für ein Objekt wie der Spieler es ist, oder das Objekt eines Gegners, oder für eine sich öffnende Kiste. Einfach alles was sich bewegen soll. In diesem Menü stellt man die Nummer der Animation ein, das Start- und End-Frame der Animation (hast Du Dein Notizbuch parat?) und wie schnell die Animation abgespielt werden soll. Es gibt noch zahlreiche andere Einstellmöglichkeiten, aber das soll für den Anfang genügen. Bevor Du aber irgendeine Animation erstellen kannst, muss natürlich eine Animation geladen sein. Diese geladenen Animationen werden "Spritesheet" genannt.
Für dieses Tutorial habe ich ein Spritesheet erstellt. Du kannst es rechts, oben unter "Assets" herunter laden.
FRAMES, SHEETS UND EIN NOTIZBUCH
Zurück im ™REDPILL Hauptmenü findest Du den Button "Spritesheets". Plural. Also ... Mehrzahl. Ein schwieriges Thema. Warum? Nimm Dir einen Keks, setze Dich und höre mir zu:
Grundsätzlich kann jedes ™REDPILL Game mehrere Spritesheets besitzen. Eines für die Spieleranimation, diverse für die Gegneranimationen. Vielleicht auch die Animation einer sich öffnenden Kiste. Überhaupt kein Problem. Ein Spritesheet ist ein Bild welches in Frames unterteilt ist, so wie ein Tileset in einzelne Tiles unterteilt ist. Stelle Dir das vor wie die einzelnen Bilder auf einer Filmrolle. Ganz am Anfang ist das Bild Nummer 0 und ganz am Ende, nach den Credits und dem "Zweiter Teil Alarm!" findet sich Frame X. Nun ist so ein Film in der Regel kein zweistündiges Erlebnis ohne Schnitt (ich schrub: in der Regel, es gibt da Ausnahmen!). Im Gegenteil. Ein Film ist ganz oft in Szenen unterteilt:
Der Protagonist nähert sich dem Haus -- <Schnitt> -- Der Protagonist öffnet die Tür -- <Schnitt> -- der Protagonist bekommt die Tür nicht auf weil, nachdem er zwei Jahre Zigaretten holen war, eine Tonne Post dahinter auf dem Boden liegt -- <Schnitt>.
Ein ™REDPILL Spritesheet sieht ähnlich aus:
Die Spielfigur läuft nach rechts -- <Schnitt> -- die Spielfigur läuft nach links -- <Schnitt> -- die Spielfigur steht gelangweilt in der Gegend herum weil der Spieler Zigaretten holen gegangen ist -- <Schnitt>.
Jede einzelne dieser Szenen (Rechts laufen, links laufen, herum stehen) besteht aus einer Reihe von Einzelbildern. Spielt man diese mit einer ausreichenden Geschwindigkeit hintereinander ab, entsteht der Eindruck einer fließenden Bewegung. Nur dass ein ™REDPILL Film aus vielen Filmrollen (also Spritesheet-Bildern) besteht.
All diese Einzelbilder der Animation müssen sich in einem einzelen Bild befinden. Nun muss man aber wissen dass es, meiner Erfahrung nach, schwierig ist ™REDPILL dazu zu überreden Bilder zu laden die größer sind als 320x256 Pixel. Das Readme sagt etwas anderes, aber das scheint nicht zu funktionieren. Wenn Du da mehr wissen solltest: Immer her mit den Infos! So ein 320x256 Bild ist recht winzig, selbst für AMIGA-Verhältnisse. Wenn Dein Spieler 32x32 Pixel groß ist, bleiben gerade einmal 80 Bilder für alle Frames aller Animationen eines Objekts. Das Spritesheet startet also mit dem Frame 0 und endet mit der lauschigen 79. Aber was ist wenn Du schon alle Frames für Deine Spielfigur verbraten hast und Deine Gegner noch gar keine Grafik haben? Nun, dann benötigst Du ein zweites Spritesheet und hier beginnt der Ärger. Kommen wir zurück zum Keks und dem Dilemma:
Zwar wird Dir unter dem Hauptmenüpunkt "Animations" das Spritesheet mit der Nummer 0 angezeigt, Du kannst aber kein anderes auswählen, selbst wenn Du bereits Spritesheet 0, 1 und 2 erstellt hast. Dort steht stets eine 0. Du kannst aber das Startframe und das Endframe auswählen und das geht über jenes des Spritesheets 0 hinaus. Besteht Deine Animation also aus 7 Bildern, kannst Du trotzdem ein Endframe jenseits dessen auswählen.
Ich sehe Fragezeichen, höre ein "HÄ?" und fühle einen Rage Quit. Aber Gemach, ich kann das erklären!
Stelle Dir alle Deine Animationen, in allen einzelnen Spritesheets, als riesiges Bild vor. Du hast ein Bild mit den Spieleranimationen, ein Bild mit einer Gegneranimation und eines für eine sich öffnende Kiste. Wenn die Spieleranimation mit Frame 15 endet und die Animation des Gegners 8 Bilder (Frames) besitzt. Dann beginnt die Gegneranimation nicht mit Frame 0, sondern mit Frame 16. Also direkt hinter dem letzten Frame der Spieleranimation. Crazy, ich weiß. ™REDPILL hängt einfach alle Animationen aneinander und es ist an Dir auszurechnen wann welche Animation beginnt und wann sie endet. Schnappe Dir also Dein Notizbuch und notiere Dir in welcher Reihenfolge Du die einzelnen Spritesheets geladen hast, wieviele Frames diese umfassen und die Start- und Endframes der enthaltenen Animationen. Addiere die Frame-Anzahl der einzelnen Spritesheets und notiere Dir die Startframes aller Unteranimationen, denn sie beginnen nach Animation 0 nicht mehr mit Frame 0.
SPRITESHEETS
Jetzt wollen wir aber endlich das erste Spritesheet laden und konfigurieren. Auf den Ärger mit den Frame-Nummern werden wir immer wieder einmal zurück kommen, bis auch der Letzte das Dilemma verstanden hat. Klicken wir also im ™REDPILL Hauptmenü auf "Spritesheets". Im Folgenden Bildschirm können wir, als offensichtlichstes Element, ein Bild laden.
TIPP: Achte darauf dass die Spritesheets dieselbe Palette besitzen wie Dein Tileset. Es werden keine Hardware-Sprites verwendet und es kann in ™REDPILL, für alle Elemente eines Levels, nur eine einzelne Palette geben!
Sobald Du ein Bild zum laden ausgewählt hast, wird dieses auch im oberen Bereich angezeigt. Solltest Du das Spritesheet dieses Tutorials verwenden, ist auch schon das korrekte 32x32 Pixel Raster über das Spritesheet gelegt, denn per Voreinstellung verwendet ™REDPILL diese Größe für Animationsframes. Nutzt Du eine andere Frame-Größe musst Du diese unten bei "Grid" entsprechend einstellen. Wenn alles passt ignorieren wir alle weiteren Einstellmöglichkeiten und klicken auf "Slice Sheet". ™REDPILL rechnet nun eine Zeit lang und direkt danach sind all unsere Einzelbilder umrahmt und nummeriert. Das diese Nummerierung nur bei Spritesheet 0 stimmt haben wir ja schon besprochen und werden wir auch immer wieder mal auf Tapez heben. Jetzt klicken wir aber ersteinmal auf "OK" und verlassen das Spritesheet Menü.
UND ES BEWEGT SICH DOCH!
Mit einem geladenen Spritesheet sind wir nun endlich in der Lage Animationen zu definieren. Klicke also im ™REDPILL Hauptmenü auf den Button Animations, damit wir direkt weiter machen können.
Wie in anderen Menüs können wir hier die Nummer der zu definierenden Animation auswählen. Voreingestellt ist hier die Animation 0 (Notizbuch, Diggi!). Da wir im Moment nur ein einzelnes Spritesheet geladen haben, können wir auch direkt die Frame-Zahlen verwenden die unter "Spritesheets" angezeigt wurden und die wir auch in unserer Grafiksoftware abzählen können. Das Tutorial-Spritesheet für die Spielfigur beginnt mit dem Frame 0 und endet mit dem Frame Nummer 17. Allerdings ist das Spritesheet unterteilt in die Animationsequenzen "Laufe nach rechts", "Laufe nach links" und "Stehe in der Gegend herum.". Als wir im Spritesheet auf "Slice Sheet" geklickt haben, hat es uns auch die Frame-Nummern angezeigt. Wir können also notieren:
- Laufe nach rechts: Frame 0 - 6
- Laufe nach links: Frame 7 - 13
- Stehe herum: Fra,e 14 - 17
Wir benötigen also mindestens 3 Animationen. Beginnen wir mit der voreingestellen Animation 0 und stellen bei "Start Frame" den Wert 0 ein -- wobei der bereits dort stehen sollte. "Num Frames" möchte wissen wieviele Frames diese Animation insgesamt umfasst. Ein kurzes Nachzählen ergibt für diese Einstellung den Wert 7. Bei "Frame Time" sollten wir den Wert ".2" einstellen da unsere Animation etwas mehr Frames enthält als ™REDPILL erwartet hätte.
Rechts, neben dem Feld "Anim 0" können wir jetzt auf den Pfeil nach rechts klicken um auf die Animation 1 (Anim 1) zu wechseln. Hier nehmen wir ähnliche Einstellungen vor, nur dass diese Animation mit dem Frame 7 beginnt aber auch insgesammt 7 Frames umfasst. Dieser Wert kommt erneut in das Feld "Num Frames". Auch für Animation Nummer 1 sollte die "Frame Time" den Wert 0.2 erhalten. Die letzte Animation, das gelangweilte Herumstehen, konfigurieren wir in Animation Nummer 2. Klicke also erneut auf den Pfeil nach rechts neben der Animationsnummer oben und gebe als Startframe die Nummer 14 ein. Die sogenannte "Idle Animation" umfasst hier nur vier Frames, weshalb wir bei "Num Frames" den Wert 4 eintragen. In dieser Animation können wir die "Frame Time" auf 0.5 belassen weil vier Frames dann doch etwas weniger sind als sieben.
Ich hoffe Du hast Dein Notizbuch verwendet um Dir die Nummern und Namen Deiner Animationen zu notieren. Später wird ™REDPILL Dich nur noch nach der Nummer der zu verwendenden Animation fragen. Der Inhalt ist ™REDPILL vollkommen Wumpe ... der sollte in Deinem Notizbuch stehen!
FAZIT
Ja super! Drei Animationen an einem Tag konfiguriert. Das soll uns erstmal jemand nach machen. Im Animations-Menü findest Du den Punkt "Current Frame". Neben diesem steht eine Zahl und neben dieser Zahl befindet sich ein Button mit einem Pfeil nach rechts. Klickst Du auf diesen Button, kannst Du Dir die aktuell ausgewählte Animation abspielen lassen. Spiele ein wenig mit der "Frame Time" herum um herauszufinden welche Animationsgeschwindigkeit am besten zu Deinem Spiel und Deiner Animation passt.
Jetzt weißt Du wie man Spritesheets lädt, wie man diese in Animationen verwendet und wie unglücklich man werden kann wenn man all die lustigen Frame-Nummern ausrechnen und notieren musss. Aber hey! Das entmutigt uns nicht. Im Gegenteil! Im nächsten Kapitel werden wir uns anschauen wie man die heute gebauten Animationen an der Spielfigur anwendet, denn woher soll ™REDPILL wissen wann die Spielfigur wie aussehen soll? Spoiler: Es wird getriggert!