Loading a Saved Tilemap (ReadFile)
BlitzMax Forums/BlitzMax Beginners Area/Loading a Saved Tilemap (ReadFile)
| ||
Hi all, If KeyHit(KEY_S) Then 'save the map file
Local ts_savemap:TStream = WriteFile("media\usermaps\map.txt")
For Local x:Int = 0 To 14
For Local y:Int = 0 To 14
WriteInt(ts_savemap,ar_mapd1[x,y].t)
WriteInt(ts_savemap,ar_mapd2[x,y].t)
Next
Next
End If
If KeyHit(KEY_L) Then 'load the map file
Local ts_loadmap:TStream = ReadFile("media\usermaps\map.txt")
For Local x:Int = 0 To 14
For Local y:Int = 0 To 14
ar_mapd1[x,y].t=ReadInt(ts_loadmap)
ar_mapd2[x,y].t=ReadInt(ts_loadmap)
Next
Next
End IfThe save portion of the above code works fine, but the load portion doesn't. It 'works', but it just populated my ar_mapd1 and ar_mapd2 arrays with all the same tiles (in otherwords, not what I saved!) Would anyone be kind enough to point out where I've made the mistake(s)! Thanks! |
| ||
are you shure you are saving it correctly? have you looked at the saved file? put a print in the save loop to see what it's saving:print ts_savemap,ar_mapd1[x,y].t + " " + ts_savemap,ar_mapd2[x,y].t |
| ||
SuperStrict
Graphics 640,480
Const LOAD_FROM_FILE:Byte = False 'change to true to load from file
Const MAP_WIDTH:Int = 15
Const MAP_HEIGHT:Int = 15
Type TTilemap
Field t:Int
End Type
Global ar_mapd1:TTilemap[MAP_WIDTH,MAP_HEIGHT]
Global ar_mapd2:TTilemap[MAP_WIDTH,MAP_HEIGHT]
If LOAD_FROM_FILE = True
LoadTileMap()
Else
RestoreData dat
For Local y:Int = 0 To MAP_HEIGHT-1
For Local x:Int = 0 To MAP_WIDTH-1
Local incomingData:Int
ReadData incomingData
ar_mapd1[x,y] = New TTileMap
ar_mapd2[x,y] = New TTileMap
ar_mapd1[x,y].t = incomingData
ar_mapd2[x,y].t = incomingData
Next
Next
End If
Repeat
Cls
If KeyHit(KEY_S) Then 'save the map file
SaveTileMap()
End If
If KeyHit(KEY_L) Then 'load the map file
LoadTileMap()
End If
For Local y:Int = 0 To MAP_HEIGHT-1
For Local x:Int = 0 To MAP_WIDTH-1
If ar_mapd1[x,y].t = 1
DrawRect x Shl 4, y Shl 4,16,16
End If
Next
Next
Flip
Until KeyDown(KEY_ESCAPE)
End
Function LoadTileMap()
Local ts_loadmap:TStream = ReadFile("map.txt")
For Local y:Int = 0 To MAP_HEIGHT-1
For Local x:Int = 0 To MAP_WIDTH-1
ar_mapd1[x,y] = New TTileMap
ar_mapd2[x,y] = New TTileMap
ar_mapd1[x,y].t=ReadInt(ts_loadmap)
ar_mapd2[x,y].t=ReadInt(ts_loadmap)
Next
Next
CloseStream ts_loadmap
End Function
Function SaveTileMap()
Local ts_savemap:TStream = WriteFile("map.txt")
For Local y:Int = 0 To MAP_HEIGHT-1
For Local x:Int = 0 To MAP_WIDTH-1
WriteInt(ts_savemap,ar_mapd1[x,y].t)
WriteInt(ts_savemap,ar_mapd2[x,y].t)
Next
Next
CloseStream ts_savemap
End Function
#dat
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DefData 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Quicky! ;) Dabz |
| ||
| Thanks - tested that and it certainly appears to be saving the data as expected. So I'm guessing it's defintely the load routine that's falling over somewhere... Hmm... |
| ||
ar_mapd1[x,y] = New TTileMap ar_mapd2[x,y] = New TTileMap In my example, tinker with this line:- Const LOAD_FROM_FILE:Byte = True Dabz |
| ||
| well Dabz beat me to it while i was typing it up, but here it is anyway seems to work. i'm wondering if your problem is a lack of 'CloseStream' commands in the load and save functions, their absent atleast from the code in the first post. |
| ||
| Thanks guys, I've got it working now thanks to your help. Where would I be without this site?! ;) ;) |
| ||
| well Dabz beat me to it while i was typing it up, but here it is anyway lol, I've wrote that much code surrounding tilemaps that it just rolls off the fingers! :) Dabz |
| ||
| glad you got it working matt lol, I've wrote that much code surrounding tilemaps that it just rolls off the fingers! :) no doubt :) as i was coding my example, i was able to fill the arrays with dummy figures, then save the map file and clear it, but i could not load it unless i exited out of the program and restarted then load the map right away. it's been quite awhile since i wrote any load/save routines so i pondered over it again and again then i decided to look at the help files. sure enough 'dohhh' i forgot to close the streams after use, once i did that every thing seemed to work fine. |
| ||
| Cheers! but i could not load it unless i exited out of the program and restarted then load the map right away. Strangely, that was a subsequent issue I had - As you say, it was down to the fact I wasn't closing the stream. DOH! Thanks once again... |