TileD tilemap, rendering isometric tiles
Monkey Forums/Monkey Programming/TileD tilemap, rendering isometric tiles
| ||
Hiya! I have a little problem here... And I can't figure out what's causing it. I'm coding a game engine (just because I like technical coding) that supports TileD tilemap format. Rendering orthogonal tilemaps works fine, getting the correct tiles for each GID, but with this isometric test, I get somewhat confused and can't really explain what happens... So I'll help you out with images and code: My tilemap in the editor and running on my engine: ![]() Screenshot showing how the tiles are arranged in the tileset: ![]() The tilemap renders as it does in TileD, but I can't figure out why the tiles are so weirdly off... Isometric rendering method and RenderTile(): Method RenderIsometric:Void() 'note: Needs a screen-clipper Local x:Int, y:Int, gid:Int Local _x:Float, _y:Float, halfTileW:Float = tileWidth * 0.5, halfTileH:Float = tileHeight * 0.5 For y = 0 To parent.map.height - 1 For x = 0 To parent.map.width - 1 _x = (y * halfTileW) - (x * halfTileW) _y = (x * halfTileH) + (y * halfTileH) gid = data.GetTileID(x, y) RenderTile(gid, _x, _y) Next Next End .... Method RenderTile:Void(gid:Int, x:Int, y:Int) Local tileset:= parent.map.GetTilesetForGID(gid) If tileset = Null Then Return If tileset.image = Null Then Error("RENDER: Image for tileset '" + tileset.name + "' has failed to load!") gid -= tileset.firstGID Local idX:Int = (gid mod tileset.width) * tileset.tileWidth Local idY:Int = (gid / tileset.width) * tileset.tileHeight DrawImageRect(tileset.image, x, y, idX, idY, tileset.tileWidth, tileset.tileHeight) End Method to get corresponding tileset for GID: Method GetTilesetForGID:TiledTileset(gid:Int) Local set:TiledTileset For set = EachIn tilesets.Values() If gid >= set.firstGID And gid < set.lastGID Return set EndIf Next Return Null End Method for getting tile ID: Method GetTileID:Int(x:Int, y:Int) If width = 0 Then Return - 1 Return tiles.Get(y * width + x) End If you spot _anything_ worth mentioning, I'd appreciate it very much. Thanks in advance. ~misthema |
| ||
Have you tried loading your map using the Diddy TileD renderer? Looking at your screenshots, it looks like the wrong tile is being drawn. |
| ||
No, haven't tried that - yet. But with orthogonal tilemaps, it was able to draw the correct tiles for each GID in tilemap. But with this isometric test, it does not.. That's why I posted my problem here, because it doesn't make any sense.. :D I'll report back once I've tried it with Diddy. EDIT: Ok, it looks like there's something wrong with my code somewhere.. Since Diddy did it, just fine: ![]() |
| ||
Awesome, I got it working correctly. Should have looked the render coordinates straight... Old coordinates: _x = (y * halfTileW) - (x * halfTileW) _y = (x * halfTileH) + (y * halfTileH) Correct coordinates: _x = (-y * halfTileW) + (x * halfTileW) _y = (x * halfTileH) + (y * halfTileH) "Stupid mistakes are hardest to find..." |