Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

1

04.03.2007, 20:31

8-Bit SDL Surface erstellen

Ich habe es nach wochenlangen Versuch en und ausgiebigen Studien von etlichen Dokumentationen noch immer nicht geschafft, eine brauchbare 8000*6000 große 8-Bit Surface zu erstellen. Da in der offiziellen Dokumentation steht, dass man bei 8Bit kein rmap,gmap,bmap,amap braucht habe ich diese auf NULL gesetzt. ich habe es aus Verzweiflung auch mit vielen anderen Werten versucht, was natürlich nichts genutzt hat.

Das Problem besteht darin, dass er die Surface zwar erstellt und auf den Bildschirm rendert, aber man nicht auf die Surface selbst rendern kann, sie ist also Nutzlos.

Die einzigen Lösungen, die ich gefunden habe, sind:
eine Bitmap mit diesen Eigenschaften laden (viele Megabytes groß)
einen Screenshot des Spiels machen und laden und PixelFormat daraus in das 8-Bit Surface setzen (manche Farben stimmen dann trotzdem nicht)

Frede

Treue Seele

Beiträge: 259

Wohnort: Hameln

Beruf: Schüler

  • Private Nachricht senden

2

05.03.2007, 14:06

Wenn du nicht die Surface erstellen willst und statt dessen ein Bild laden willst, benutz doch SDL_Image! Damit kannst du JPGs und PNGs ziemlich einfach laden und verbrauchst für so eine Textur nur noch 10mal so wenig.

frede
Hier könnte ihre Werbung stehen.

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

3

05.03.2007, 16:02

ich glaub eher er will eben nicht das Surface von einem Bild herleiten..(sagt mir zumindest meine Kugel)...

warum nicht einfach:

C-/C++-Quelltext

1
2
3
SDL_Surface *mySurface;

mySurface = new SDL_Surface();

Frede

Treue Seele

Beiträge: 259

Wohnort: Hameln

Beruf: Schüler

  • Private Nachricht senden

4

05.03.2007, 16:10

Nein nein, fals doch die andere MEthode nimmt, dann meint er nicht deine sondern SDL_CreateRGBSurface().

mfg frede
Hier könnte ihre Werbung stehen.

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

5

07.03.2007, 15:31

Ich will auf die Surface eine Map rendern, auf der sich der Player bewegen kann.
Von dieser Map wird immer der Teil, auf der sich der Player gerade befindet als Hintergrund auf die Hauptsurface gerendert.
Sie schiebt sich wie bei einem billigen GameBoy Spiel (z.B. Pokemon) unter dem Player hin und her.

Die Surface soll so sein, als wenn ich irgendein 8 Bit 8000*6000 Pixel großes Bild in den Arbeitsspeicher geladen hätte.
wurscht welche Farbe oder Inhalt die Surface hat, es wird eh jeder Pixel mit der Map überrendert.

Diese Surface wollte ich mit SDL_CreateRGBSurface() erstellen, was ja eigentlich funktionieren sollte, hab es aber nicht geschafft.
darum bitte ich um ein, zwei Codezeilen wie das geht, da ich das aus diversen Anleitungen anscheinend nicht richtig verstanden habe.

Ps: mit Map meine ich den Untergrund, auf dem sich der Player bewegt (Bäume. Häuser, Wiese, usw.),
falls dieser Ausdruck nicht sehr geläufig sein oder gar von mir erfunden sein sollte.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

07.03.2007, 15:48

Ist aber ein reichlich ineffizientes System...besser ist wenn du die große Map in mehrere Teilstücken zerlegst und diese dann immer dynamisch verschiebst. Also z.b. zerlegst du die map in 10*10 Teilmaps. Geladen musst du dann immer 4 haben und sobald eine oder mehrere dieser 4 Teilmaps aus dem interessanten Sichtbereich des Spielers wandert,läd man 2 neue.
Klingt irgendwie sehr wirr :? , aber geh das mal mit 4 gleichgroßen blättern o.ä. durch. Die Idee dahinter ist halt, dass man nicht den Spieler sondern die Maps unter dem Spieler verschiebt.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

7

09.03.2007, 17:20

vielen Dank Nox! Die Idee, die Map in Bildschirmgroße Teile zu zerlegen hatte ich zwar
auch schon, aber ich habe das nicht für sehr Performancesteigernd gehalten.
das mit dem Dynamisch verschieben hab ich eh schon (steht in meinem letzten Beitrag, falls du Pokemon kennst)

Wenn du meinst, dass es das bringt ließe sich das leicht machen.

mein eigentliches Problem wäre damit aber noch immer nicht gelöst, da ich ja dafür ebenso Surfaces brauche.
kann mir bitte wer helfen! Ich kann sonst nicht wirklich an meinem Spiel weiterbrogrammieren
(es will ja niemand ein 2D Amateur Rollenspiel mit 50 MB runterladen, was sollte ich dann damit machen, auf CD-ROM verkaufen?)

8

10.03.2007, 10:09

Ich würde eher 50 mb runterladen als Geld für ne CD auszugeben. 50 mb sind heute gar nicht so schlimm da die Masse einen Breitbandzugang hat oder zumindest jemand kennt der sowas hat.
Aber du kannst dir ja mal überlegen ob die 50 MB wirklich notwendig sind. Eventuell lässt sich ja das eine oder andere benutze Format durch ein kleineres ersetzen. Oder du packst die Daten (Bilder, sound usw.) in ein Zipfile das du zur Laufzeit kurz in den Speicher entpackst und von dort in die Anwendung lädst.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

10.03.2007, 14:58

Du speicherst deine Map nicht als Bild ansich, sondern merkst dir in einer Klassenstruktur wo auf welcher Teilmap sich welches Element befindet(z.B. Baum, Ufer, Weg usw.).

Es geht ja darum, dass ein 8000 * 6000 * 8bit Surface nicht sonderlich handlich ist und ein PC entsprechend damit beschäftigt ist. Auch kann man durch ein Tile basierendes System viel Speicherbedarf einsparen :).
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

10

15.03.2007, 19:11

Vielen Dank für die hilfreichen Tips. Und Noxs Idee hab ich jetzt glaub ich auch endgültig kapiert. Mein Hauptproblem ist damit aber noch immer nicht gelöst: :(

WIE GENAU ERSTELLE ICH EINE 8-BIT SURFACE:?:

Ich weiß bis jetzt nur, dass ich dafür SDL_CreateRGBSurface() brauche, aber ich werde aus diversen Dokumentationen nicht schlau, wie das funktioniert
(das Einzige, was ich bis jetzt geschafft hab, ist eine 32-Bit Surface, aber dann hab ich 18 Frames/s statt 112). ich bin anscheinend zu blöd dafür. :?

BITTE GENAUERE ANWEISUNGEN:!:

das wäre sehr nett, ich will gerne weiterprogrammieren, stecke aber schon seit über einem Monat an diesem Problem :D

Werbeanzeige