TileMap Speichern 2,5 mb?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Sprite.l[4] und Dim Map(xMax,yMax, 2 )
entsprcht 5*3=15 maximal übereinander
gezeichneten sprites. das ist doch ganz
schön viel.
vielleicht solltest du manche grafiken
schon vor der laufzeit fertig
zusammengesetzt haben.
falls du z.b. die blume zur laufzeit aus Blüte,
Blättern und Rasen zusammensetzt (weiß ja
nicht)
.. das ist unnötig. nimm eine grafik für
BlumeMitBlaetternAufRasen, eine für
BlaetterAufRasen ect.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

:shock: Warum speicherst du denn für alle Tiles noch extra die Positionen?
Das ergibt doch gar keinen Sinn.
Wenn du die als Array abspeicherst und vorher auch die Größe der Karte angibst dann sind die Positionen vollkommen redundant.

Einfache Animationen sollten vom Sprite gegeben werde nicht in der Map.
Spezielle Effekte gehen in Richtung Entity.
I´a dllfreak2001
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ähm ne anders

@artus
die "position", das ist schon richtig gedacht. dafür brauchst du Map(x,y)
für deine Layer brauchst du 3 bytes in der struct.
nämlich eins pro tile pro layer.

meistens hat ja nicht jeder layer die eigenschaft "blocked" extra für sich,
sondern solche eigenschaften sind layerübergreifend.
deswegen brauchst du sie auch nur einmal drinstehen haben,
und nur eine struct in der alle layer stehen.
es ist sowieso viel schneller, die zeichenschleifen nur ein einziges mal durchzugehen,
und für jedes tile alle layer auf einen rutsch zu zeichnen.
(vorerst. bei parallaktischen layern mit unterschiedlichen tilegrößen ist das anders, aber das kriegen mir später, vergiss es wieder)

für die animationen
> Und ich brauche alle sprites da ich wenn etwas nur blinkt es so darstellen kann: Sprite 1000, kein Spreit, Sprite 1000 oder so ähnlich.

aber wenn deine engine von anfang an weiß, dass sprite tausend eine animation mit 8 frames ist,
dann brauchst du nur die 1000 in der map speichern, und die engine weiß,
aha, 1000, dass heißt 1000,1001,1002,1003,1004,1005,1006,1007 und von vorn....

> Also das mit dem meherere Bool-Werte in einem Byte zu speichern hab ich noch nie gemacht und weis auch net so richtig wie daas geht.

schau mal in die help, das steht was über bitmanipulationen und über zahlensysteme.
aber das brauchst du auch nicht unbedingt, schau erstmal, dass du verstehst,
wie wir das meinen das tileset zu organisieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

@kearu
wieso soll er denn die positionen speichern wenn es sich um ein 2d-array handelt?

Oder habe ich das jetzt falsch verstanden meint er mit den ersten beiden jetzt das (aus map(X,Y,I)) das X und Y oder meint er die ersten beiden durchläufe das I (das hab ich nämlich unter seiner aussage verstanden).

Ich dachte die Layer wären das hier

Code: Alles auswählen

          WriteLong(0,Map(X,Y,I)\Sprite[0]) 
          WriteLong(0,Map(X,Y,I)\Sprite[1]) 
          WriteLong(0,Map(X,Y,I)\Sprite[2]) 
          WriteLong(0,Map(X,Y,I)\Sprite[3]) 
          WriteByte(0,Map(X,Y,I)\Type) 
          WriteByte(0,Map(X,Y,I)\Spirited) 
          WriteByte(0,Map(X,Y,I)\Blocked) 
Oder sind jetzt die ersten 4 sprites da die Animationsstufen.
I´a dllfreak2001
Benutzeravatar
Artus
Beiträge: 280
Registriert: 15.01.2005 20:53

Beitrag von Artus »

mhh also die Positionen werden nich gespeichert
und das:

Code: Alles auswählen


          WriteLong(0,Map(X,Y,I)\Sprite[0]) 
          WriteLong(0,Map(X,Y,I)\Sprite[1]) 
          WriteLong(0,Map(X,Y,I)\Sprite[2]) 
          WriteLong(0,Map(X,Y,I)\Sprite[3]) 
          WriteByte(0,Map(X,Y,I)\Type) 
          WriteByte(0,Map(X,Y,I)\Spirited) 
          WriteByte(0,Map(X,Y,I)\Blocked) 

is ein ganzer Layer zB: Map(4,5,1)\Sprite[0] ist das erste Sprite der Animation des 4/5 Feldes auf layer 1.
ich lese sie ja wieder mit der gleichen reienfolge wieder aus deshalb brauch ich keine Positionen. Das mit der 3. Dimension brauch ich für die drei layer da ich die verschiedenen Layer zu verschiedenen Zeitpunkten Zeichnen muss so zb is der 2. Layer über dem Char und die anderen beiden darunter.

mfg arthur
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Artus und KG verwenden die bezeinchnung position doch nur im sinne eines index, der auch nicht gespeichert wird.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

na dann hab ich es falsch verstanden.

Wenn du mein System für Animationen benutzt kannst du wesentlich flexibler arbeiten weil auch mal mehr als nur 4 Stufen möglich sind (oder weniger).
I´a dllfreak2001
Antworten