2d Spiel: Frage zu *.png und zu Tileset`s

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

2d Spiel: Frage zu *.png und zu Tileset`s

Beitrag von squee »

Hallo erstmal...


Für die Leute die keine Lust haben viel Geschwafel zu lesen fasse mal alles kurz zusammen. :allright:

----------------------------------------------------------------------------------

- Kann mann mit PB *.png`s laden und weden Transparenzen dargestellt?

- Ist es sinnvoller die Map auf einem Tileset basieren zu lassen oder die ganze Spiele Welt als ein Bild zu laden?

Schon mal vielen Dank! :mrgreen:

----------------------------------------------------------------------------------


Für die die mehr lesen:

Ich habe angefangen ein Rollenspiel mit dem RPG Maker zu erstellen...

Bild: http://www.enterbrain.co.jp/tkool/RPG_XP/eng/capt01.gif

... bin aber schon sehr bald auf meine Grenzen gestosen da der RPG Maker nur wenige Befehle hat.
Nun habe ich beschlossen auf eine richtige Programmiersprache umzusteigen und bin hier gelandet :mrgreen: .

Meine Idee war nun eine einzige Map zu erstellen inder ich fünf Ebenen übereinander habe.

- Die erste Ebene soll für das Hintergrundbild verwendet werden.
- Die zweite Ebene für Objekte die sich unter dem Spiele befinden.
- Die dritte Ebene für den Spieler und NPC`s
- Die vierte Ebene für alles was über dem Spieler zu sehen ist
- Die fünfte Ebene für alles was sonst noch kommen kann^^

Jetzt stellt sich die Frage ob PB ein Bildformat [am liebsten wäre mir *.png] mit Transparenzen unterstützt damit ich die Ebenen einfach übereinander legen kann.

Und dann kommt dann noch die Frage was besser ist wenn ich die Ebenen als jeweils ein Bild Speicher oder ob ich das ganze mit Hilfe von Tilesets mache.


Danke für die Hilfe. <)

link anklickbar gemacht - Kaeru fecit
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Kann mann mit PB *.png`s laden

ja.
das programm muss dafür aber zu beginn den befehl UsePNGImageDecoder() enthalten.

> weden Transparenzen dargestellt?

jain.
simple einfarbige transparenz ist ohne probleme mit jedem ladbaren grafiktyp möglich.
(also auch bei BMP und JPG)
du definierst dafür einfach mit TransparentSpriteColor(...) die farbe, die nicht dargestellt werden soll.
für ein RPG-Maker ähnlichen stile sollte das vollauf genügen.

die spezielle ALPHA-Transparenz von PNG, also, weiche transparenzübergänge,
ist etwas komplizierter zu benutzen, aber wie gesagt, für das von dir genannte projekt nicht nötig.


> Ist es sinnvoller die Map auf einem Tileset basieren zu lassen

ja, auf jeden fall, immer.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

PNG kannst du (wenn du UsePNGImageDecoder() verwendest) laden.
Mit den Befehlen TransparentSpriteColor() und DisplayTransparentSprite() kannst du eine Farbe einstellen die Tranzparent dargestellt werden soll, und dann das Sprite zeichnen.
Oder du benutzt direkt Sprite3D

Zur Darstellung: auf jeden fall eien Tilemap benutzen.
Ein Bild für die ganz welt wäre erstens viel zu Speicherfressend, zweitens viel zu langsam in der Darstellung und drittens einfach nich schön ;)
Zum Thema Tilemap gibt es hier einige Threads.
Benutz einfach mal die SuFu und du solltest einiges finden

//edit: da war wohl Kaeru schneller ;)
Benutzeravatar
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

THX

Beitrag von squee »

Danke :allright:
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Wie sinnvoll Tilemaps in dem Fall sind kannst du dir ganz einfach selbst ausrechnen.

Nehmen wir mal an, du willst eine Level darstellen. Du begnügst dich schon mit einer sehr kleinen Map von nur 10 mal 10 Bildschirmen, bei einer Auflösung von 800*600 Pixeln. Deine Spielwelt ist also 8000*6000 Pixel groß. Du willst den alphakanal von PNGs als transparenz nutzen, arbeitest also mit 32 bit Farbtiefe (also 4 byte). Dann brauch eine Ebene deiner map 8000*6000*4 byte Arbeitsspeicher, das sind 192 000 000 byte was rund 184 MegaByte sind. Das ganze jetzt mal 5 für deine 5 Ebenen, dann brauch alleine deine winzige Map 915 Megabyte Ram.

Da das ganze quadratisch wächst, bist du bei interessant großen levels schnell bei einigen Gigabyte Ram.



Das ganze jetzt nochmal für Tilemaps.
Du nimmst zum Beispiel Tiles von einer größe von 20*20 Pixeln und arbeitest mit Utopischen 1000 verschiedenen Tiles.
Ein Bildschirm der größe 800*600 bestünde dann aus 40*30 Tiles.
Deine 10*10 Bildschirm großen Levels also insgesammt aus 400*300 Tiles.
Du kommst mit einem Long pro Feld und Ebene aus... aber lass uns mal annehmen du möchtest richtig viel Platz verschwenden und nutzt 5 longs pro ebene, also 20 Byte pro ebene.

Dann brauch dein Level 400*300*20*5 Byte Ram + 1000*20*20*4 Byte für dein gesammtes Tileset, das sind 12000000 + 1600000 Bytes, also 13600000 Bytes, was etwa 13 MegaByte entspricht.
Benutzeravatar
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

Beitrag von squee »

:? Boa so viele Zahlen

Naja... ich hab nicht vor nen Gothic 3 Remake zu schreiben :mrgreen:

Die Map wäre höchstens 1024px auf 768px

Aber danke, des brinkt mich weiter ich glaube die Rechnung kann ich gut gebrauchen!!!

Ich glaub deutlicher hätte man mir des nicht machen können :allright:
--------------------------------------------------------------------------------------------------------------

www.squee-design.de
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Die Map wäre höchstens 1024px auf 768px

das wär ja kaum map zu nennen... :?

wie auch immer...
selbst für sehr kleine maps sind tilemaps weit praktischer, auch aufgrund dessen,
dass du kollisionen bzw. unpassierbare felder direkt über die map checken kannst.
du braucht im endeffekt kein einziges SpriteCollision für sowas,
du rechnest das alles über koordinaten.

aber dazu kommst du erst später, mach erstmal an der map selber weiter. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Mit map meine ich nicht nur sowas wie eine Übersichtskarte, sondern quasi den Spielbereich. Selbst rpgs von 1990 hatten Levelgrößen von mehreren Bildschirmen Größe.

Das Jump and Run Turrican hatte sogar auf dem C64 Levels von mehr als dreißig Bildschirmen breite und höhe ;)
Benutzeravatar
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

Beitrag von squee »

:shock: UPS...

Da hab ich was vregessen zu sagen... sry

Also wer von euch hat schon mal einen der alten Final Fantasy Teile gespielt?

Die Bilder in der Map werden mit nem 3d Tool erstellt und wenn mann z.B.: mit dem Chara nach oben läuft dann wird die Grafik des Charas in bestimmten Abständen immer kleiner dadur ensteht eine Art 3d Effeckt^ 8)
[aber ich einige schen werden sich wiederholen desswegen ist glaub des Tileset doch besser...]

Weil ich das machen Will bin ich im RPG Maker auch an meine Grenzen gestoßen.

Die Map muss also nicht größer als 1024px auf 768px sein. :mrgreen:
--------------------------------------------------------------------------------------------------------------

www.squee-design.de
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Wir meinen hier mit Map quasi die gesamte Spielwelt, nicht die Bildschirmgröße. Die Bildschirmgröße und damit der Teil der Welt der gleichzeitig gezeigt wird, spielt keine Besonders große Rolle für den Speicherbedarf.
Bei einer Tilemap wird immer nur ein kleiner Teil der gesamten karte gezeichnet.
Antworten