Erstmal... tut mir Leid, dass ich den alten Thread hochhole, find's aber besser als wieder einen neuen aufzumachen...
und ich will endlich kapieren wie das mit den Tilemaps geht
Kaeru Guman hat geschrieben:
also... am besten speicherst du longs...
...liest in ein 2D-array...
gehst das array beim anzeigen durch...
also
Code:
Dim Map(1,1)
Procedure LoadTileMap
If OpenFile(0, "\GFX\Map\map.map")
XS = ReadLong()
YS = ReadLong()
ReDim Map(XS,YS)
For t = 0 To YS
For n=0 To XS
Map(n,t) = ReadLong()
Next
Next
CloseFile(0)
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
die ersten beiden Longs der Datei geben die Größe an,
danach kommen die Spritenummern der Tiles zeilenweise.
anzeigen
Code:
Procedure SchowMap ( x.l, y.l)
For t=0 to 15
For n=0 to 15
DisplaySprite(Map(x+n,y+t), 32*n, 32*t)
Next
Next
EndProcedure
damit wird ein Ausschnitt von 16x16 tiles (die 32x32 pixel groß sind)
ab der linken oberen Bildschirmecke angezeigt.
der ausschnitt beginnt bei Kartenposition (x,y)
... hoffe, das hilft dir weiter. das ist standard-vorgehensweise.
das erste Problem kam damit, dass PB ReDim nicht kennt... (3,94er Demo... aber dauert ja nichtmehr lang bis zu meinem Geburtstag

)
naja, dann hab ich eben den hier ausm Codearchiv genommen
Code: Alles auswählen
Procedure ReDim(Pointer.l, Len.l, Fieldlen.l)
fLen.l = SizeOf(LONG)
If Fieldlen <> 0 : fLen = Fieldlen : EndIf
Fields.l = PeekL(Pointer - 8)
If Len < Fields
PokeL(Pointer - 8, Len + 1)
ProcedureReturn Pointer
Else
oldArrayLen.l = (Fields * fLen + 8)
newArrayLen.l = (Len * fLen)
newArray = AllocateMemory(newArrayLen + 8)
CopyMemory(Pointer - 8, newArray, oldArrayLen)
PokeL(newArray, newArrayLen)
ProcedureReturn newArray
EndIf
EndProcedure
und bei ReDim
genommen
Soweit so gut, aber wenn ich deine Proceduren benutz passiert nichts...
hab als test bei der Map-datei einfach mal 1111 reingetan... mach ich da was falsch?
Ich glaub mir fehlt da vielleicht auch ein bisschen Grundwissen, bei den Textdateien kann man doch von 0 - 9 IDs eintragen, heißt doch, dass ich nicht mehr als 10 benutzen darf, da 10 schon wieder als eine 1 und eine 0 erkannt wird, oder denk ich da grad falsch?
die Grafiken sind übrigens bei mir unter GFX\Sprites (einzelne mit den Namen 1, 2, 3 usw...) und GFX\Tiles (für die Felder, 1, 2, 3 usw.)
Hoffe dir ist die Lust nicht langsam vergangen Kaeru Guman^^
Würde mich wirklich auf eine Antwort freuen....
Danke im Vorraus
Rubiko