Frage

Ich bin ein Grund Sprite-Engine für meine eigene Unterhaltung zu schreiben und besser mit Java 2D-API aquainted zu erhalten. Zur Zeit mache ich Gebrauch von einer großen Anzahl von separaten PNG-Dateien mit transparentem Hintergrund der verschiedenen Sprites und verschiedene Rahmen der Animation darzustellen, die ich brauche. Die meisten ‚realen Welt‘ Spiel Entwicklungsprojekte scheinen Verwendung von ‚Sprite-Blätter‘, die enthalten mehrere Sprites oder Frames der Animation in einer einzigen Datei zu machen. Auch, anstatt Verwendung von nativen Bild Transparenz-Unterstützung machen, nominieren die Menschen oft eine beliebige Farbe, die in der Sprite-Pallette nicht erscheint die transparente Farbe. Wie kann man eine Datei wie diese programmatisch verwalten?

  • wie Sie wissen, wo ein Sprite beginnt und die nächste beginnt
  • Wie geht man mit Transparenz

Es können auch andere Faktoren, die ich nicht von hier gedacht habe, so dass ich kann wie oben denke ich an Dinge oder Menschen Vorschläge machen (tun Sie dies bitte in den Kommentaren).

zur Liste hinzufügen
War es hilfreich?

Lösung

Ich verwende XML-Dateien zur Zeit durch eine einfache Sprite-Editor erzeugt, die das Sprite als eine Sammlung von speichern (optional animiert) darstellt, die wiederum eine Sammlung von Frames oder Zellen sind. Frames pro Speicher-Rahmeninformation wie die x- und y-Offset des Rahmens in Blatt-, Zell Breite und Höhe, und jede Transformation (die Größe / Umdrehung / Farbton / etc.). Poses speichern einzelne Frames und Animationsinformationen (Geschwindigkeit, zum Beispiel), und eine Pose Namen leicht zu identifizieren, sie im Programm (hero.pose = sprite.pose [ „standing_right“]). Sprites als Dokument Wurzel dient mehrere Posen, wie eine Pose für jede Blickrichtung zu halten.

Eine weniger flexible Alternative I früher verwendet wurde, den festgelegten Größen für Zellen und Blätter zu spezifizieren und Rahmen-Offsets und Größen auf der Grundlage dieser Werte berechnet werden (beispielsweise Breite ist immer 32 Pixel, so dritten Sprite ist bei 32 * 2). Später begann ich diese Dimensionen im Dateinamen angeben (z sprite_name_32x64.png) für Sprites, die die festen Zellabmessungen nicht passen. Ich mag den neuen Ansatz, vor allem mit einem simplen Editor, der die meisten Werte für mich ausfüllt und ermöglicht es mir, Sprites als Vorlagen für andere Sprites zu verwenden.

verwende ich das Alpha und Transparenzinformationen in PNG-Bilder gespeichert direkt so brauche ich nicht zu befürchten es an anderer Stelle zu speichern, obwohl andere Ansätze einen festen Wert pro Sprite zu holen wäre und irgendwo zu speichern, verwenden Sie das äußerste linke Pixel in der darstellen, wenn Sie es immer leer kennen, verwenden Sie einen Eintrag bestimmte Palette, wenn Sie diejenigen, Sprite Masken verwenden, oder was Sie haben.

Andere Tipps

Nicht über java aber in der Regel können Sie Ihre alle Sprites in der gleichen Größe machen. So werden Sie in der Lage sein, für Schleifen Sprites im Spiel (oder app) mit einem einfachen zu erzeugen.

Aber für unterschiedlich große Sprites kann es sein Problem für spritesheet Größe (es kann größer sein als erwartet). So müssen Sie eine XML oder JSON-Datei für Ihre spritesheet definieren Sie Ihre Sprite Bilder in Ihrem Code zu finden. Sie können Sprite Blatt Editoren (es gibt viele von ihnen, ich bin Sprite Meister verwenden) für die schnelle und einfache Möglichkeit, Sprite Blatt zu erzeugen und Daten koordinieren.

Machen Sie Ihre Sprite Blatt die Größe und Anzahl jeder Sequenz zu kennen.

Schnappen Sie sich eine gepufferte Bild Ihrer Folie und verwenden Sie so etwas wie folgt aus:

currentframe=spritesheet.getSubimage(x, y, w, h); 

Ihre x und y wird auf dem Rahmen sind Sie an ändern sich entsprechend. Halten Sie die Breite und Höhe der gleiche, um die Dinge einfach auf sich selbst zu machen.

Vergessen Sie das gesamte Spiel auf einem Blatt zu halten versuchen. Es ist verrückt und schwer zu verwalten. Verwenden Sie einen neuen png für jede Animationssequenz. Wenn Sie anal sind über das Speichern nur Platz rechts Animationen bewegen und Flip nur die gepufferte Bild Echtzeit, um nach links.

Java wird mit der Alpha-PNG-Dateien lesen, damit sich keine Sorgen über die Transparenz der Farbe. Zeichnen Sie alles in pngs. Mit Photoshop oder Gimp.

Google-Suche für Java Bild TYPE_INT_ARGB

Nun, da die meisten von ihnen Brauch sind, sind solche Details zu den Implementierer auf. Sie müßten generell die Datei mit Header-Informationen beginnen, die die Details der Höhe / Breite und Codierung enthalten, Transparenz usw.

Viele der Zeit, die Dinge in einer Datei sind, weil es sehr teuer ist, mehrere Dateien im Vergleich zu öffnen / liest eine Datei zu öffnen / lesen. Viele Spiele-Engines verwenden zip oder „ziplike“ Dateien mit 0 Kompression eine einzelne Datei als Dateisystem zu behandeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top