sprites

Status
Nicht offen für weitere Antworten.

Heiland

Bekanntes Mitglied
Ich habe da noch eine Frage zu sprites in Spielen! Ich habe ein .gif file, indem eine Animation von meinem Character drinnen ist. Das sieht so aus:

100a1hrmi2bcw.gif


Jetzt will ich diese Animation in mein Programm einlesen und ausgeben, sodass von links nach rechts die Figuren eingelesen werden und dann im Programm als Animation rauskommt.

Bitte beachten! Das Bild enthält auch noch andere Animationen, wir sprechen aber nur von der ersten reihe!!!

Danke
 

Grizzly

Top Contributor
Ich würde einfach das Bild als ganzes Einlesen. Danach anhand von einer zweiten Datei, in der die Koordinaten sowie die Größe der einzelnen Bilder steht, das Bild in viele Bilder zerlegen.

Die Animation an sich ist etwas komplizierter. Entweder Du machst für jedes animierte Sprite einen Thread auf oder Du benützt den Haupt-Thread Deiner entsprechenden Engine (ich nenn' das jetzt einfach mal so ;) ).
 

Reality

Top Contributor
Grizzly hat gesagt.:
Die Animation an sich ist etwas komplizierter. Entweder Du machst für jedes animierte Sprite einen Thread auf oder Du benützt den Haupt-Thread Deiner entsprechenden Engine (ich nenn' das jetzt einfach mal so ;) ).
Wenn man die Bilder erst mal zerlegt hat, ist die Animation kein Problem mehr. ;)

Ich würde folgendes machen: Es soll von Koordinate x bis zu Koordinate y alles einlesen, außer die Farbe rosa. Dann hast du das erste Bild und die nächsten folgen auch auf diese Art.

Wüsste persönlich nicht, wie ich es umsetzen würde.

Liebe Grüße
Reality
 

Heiland

Bekanntes Mitglied
Danke! Das mit den Koordinaten hatte ich mir auch so gedacht. Wie geht es weiter, wenn ich das habe. Also sagen wir ich habe das Bild in viele einzelbilder zerlegt. Dann müsste ich eine Sprite-funktion oder so schreiben, die das in einen Sprite macht, oder?
 

Reality

Top Contributor
Ich kenne da zwei Möglichkeiten.

1. Möglichkeit:
Zeichne 90 Millisekunden lang Bild1, dann zeichne 90 Millisekunden lang Bild2 etc.

2. Möglichkeit.
Zeichne Bild1 und pausiere den Thread für 90 Millisekunden, dann zeichne Bild2...

Möglichkeit 1 ist meiner Meinung nach die saubere Lösung.

Liebe Grüße
Reality
 

akira

Bekanntes Mitglied
Du brauchst das Bild übrigens nicht zerschneiden, sondern beim Zeichnen eines Frames diesen Bereich clippen und das Bild an dem entsprechenden Offset zeichnen.
 

Heiland

Bekanntes Mitglied
Ok, sagen wir ich machs wie akira und Reality sagten: Ich wähle immer einen Bereich aus, und dann zeichne ich die Bilder nacheinander in einem bestimmten Zeitabstand. Wie ich die Bilder zeichne ist klar, aber wie kann ich einen Bereich auswählen und ihn als Image speichern?
 

Illuvatar

Top Contributor
Guckst du hier: http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/BufferedImage.html#getSubimage(int, int, int, int). An das BufferedImage kommst du am besten, wenn du das Bild hiermit einliest.
 

thE_29

Top Contributor
Also in DX muss/kann man die Bilder so speichern und man muss nur sagen wie breit ein Bild ist und der holt sich das dann selber (man muss schon bisi mehr tun, aber ungefähr so).

Schade das es hier anscheinend doch schwieriger ist ;>
 

Illuvatar

Top Contributor
thE_29 hat gesagt.:
Also in DX muss/kann man die Bilder so speichern und man muss nur sagen wie breit ein Bild ist und der holt sich das dann selber (man muss schon bisi mehr tun, aber ungefähr so).
Schade das es hier anscheinend doch schwieriger ist ;>

naja, eine Zeile Code für das Bild und eine für jedes Unterbild.
 

Grizzly

Top Contributor
Das Rosa bekommt man weg, in dem man in der Grafiksoftware die Farbe bzw. den Farbindex auf transparent stellt und das Bild als GIF oder PNG abspeichert. Java kann mit Transparenz umgehen und sollte die Grafik dann auch entsprechend zeichnen.

P.S.: Du musst natürlich immer das ganze Bild zeichnen und nicht nur das Animationsbild. Ansonsten wird nämlich immer einfach darüber gezeichnet ;) .
 

Reality

Top Contributor
Grizzly hat gesagt.:
Das Rosa bekommt man weg, in dem man in der Grafiksoftware die Farbe bzw. den Farbindex auf transparent stellt und das Bild als GIF oder PNG abspeichert. Java kann mit Transparenz umgehen und sollte die Grafik dann auch entsprechend zeichnen.
Das ist zu einfach! :bloed: Solche Bilder mit rosanem Hintergrund, kenne ich von anderen Spielen. Die Frage bleibt jedoch, wie sie das gelöst haben.

Liebe Grüße
Reality
 

Heiland

Bekanntes Mitglied
indem man die rosa-Farbe im Spiel rauskeyed! Ich weiß, dass Spiele-Programmiersprachen wie PureBasic BlitzBasic oder ähnliche über solche Funktionen verfügen. Auch DX kann das, habe ich aber noch nie programmiert.
In Java gibts da sicher auch was!
 

Reality

Top Contributor
Die Frage ist eben, wie man das umsetzt.
Kannst ja mal deine Lösung präsentieren, wenn du eine hast.

Liebe Grüße
Reality
 

0xdeadbeef

Top Contributor
In der Standardbibliothek wird Transparenz über den Alpha-Kanal implementiert. Wenn Du also keine eigene Routine zum Zeichnen der Sprites schreiben willst (was natürlich auch ginge), mußt Du den Alpha-Werte der rosa Pixel auf 0 setzen. Der Werte der anderen Pixel bleibt auf 1.0 bzw. 255 (Defaultwert).
 

Heiland

Bekanntes Mitglied
Ich arbeite dran... nur schreiben wir morgen noch eine Schulaufgabe in Mathe :meld:
und deshalb kann ich auch erst in den Ferien wieder weiterarbeiten. Wie gut dass die jetzt sind :lol:!! Freue mich schon richtig auf die Arbeit.

*g* also, werde dann mal meine Routine posten wenn ich fertig bin! Vielen Danke derweil für die Hilfe...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben