# sprites



## Heiland (19. Dez 2004)

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:







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 (19. Dez 2004)

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 (19. Dez 2004)

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 (19. Dez 2004)

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 (19. Dez 2004)

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 (19. Dez 2004)

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


----------



## Heiland (20. Dez 2004)

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 (20. Dez 2004)

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 (20. Dez 2004)

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 ;>


----------



## Heiland (20. Dez 2004)

Hey danke Illuvatar! Werde das mal ausprobieren!


----------



## Illuvatar (20. Dez 2004)

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.


----------



## Reality (20. Dez 2004)

Und wie kriegt man das Rosa weg?

Liebe Grüße
Reality


----------



## Heiland (20. Dez 2004)

Das muss man irgendwie rauskeyen! Keine Ahnung, wie das gehen soll, aber da findet sich schon was!


----------



## thE_29 (21. Dez 2004)

Achja, in DX war der Hintergrund weiß und net rosa :bae:


----------



## Grizzly (21. Dez 2004)

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 (21. Dez 2004)

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 (22. Dez 2004)

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 (22. Dez 2004)

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 (22. Dez 2004)

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 (22. Dez 2004)

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...


----------

