Type layers Field s.tiles Field e.tiles End Type Type tiles Field image Field x Field y Field layer.layers End Type Function CreateLayer.layers() Local layer.layers ;create new layer layer = New layers Return layer End Function Function DeleteLayer(layer.layers) Local tile.tiles ;clear tiles from layer If layer\s <> Null tile = layer\s Repeat If tile = layer\e Delete tile Exit Else tile = After tile Delete Before tile End If Forever End If ;delete layer Delete layer End Function Function CreateTile.tiles(image,x,y,layer.layers) Local tile.tiles ;create new tile tile = New tiles tile\image = image tile\x = x tile\y = y tile\layer = layer ;insert tile into layer If layer\s = Null ;this is first tile in layer, set start pointer to tile layer\s = tile Else ;there are other tiles in this layer, add tile to end of list Insert tile After layer\e End If ;update the end pointer to this tile layer\e = tile Return tile End Function Function DeleteTile(tile.tiles) ;update layers list of tiles If tile = tile\layer\s And tile = tile\layer\e ;if this tile is the only tile in layer NULL start end pointers (clear the list) tile\layer\s = Null tile\layer\e = Null ElseIf tile = tile\layer\s ;tile is first in list, update start pointer tile\layer\s = After tile ElseIf tile = tile\layer\e ;tile is last in list, update end pointer tile\layer\e = Before tile End If ;delete tile Delete tile End Function Function MoveLayerUp(layer.layers) ;if the layer before this layer exists, then move this layer, before it If Before layer <> Null Insert layer Before (Before layer) End Function Function MoveLayerDown(layer.layers) ;if the layer after this layer exists, then move this layer, after it If After layer <> Null Insert layer After (After layer) End Function Graphics 640,480,32,2 ;frame timer Global timer = CreateTimer(50) ;create 3 layers Global layer1.layers = CreateLayer() Global layer2.layers = CreateLayer() Global layer3.layers = CreateLayer() ;create some tile images Global image1 = CreateImage(32,32) Global image2 = CreateImage(32,32) Global image3 = CreateImage(32,32) SetBuffer ImageBuffer(image1) ClsColor 255,0,0 Cls SetBuffer ImageBuffer(image2) ClsColor 0,255,0 Cls SetBuffer ImageBuffer(image3) ClsColor 0,0,255 Cls ;set active layer and image Global currentlayer.layers = layer1.layers Global currentimage = image1 SetBuffer BackBuffer() ClsColor 255,255,255 Repeat Cls ;render layers If Last layers <> Null layer.layers = Last layers Repeat ;render this layers tiles If layer\s <> Null tile.tiles = layer\s Repeat DrawImage tile\image,tile\x,tile\y If tile = layer\e Exit tile = After tile Forever End If If layer = First layers Exit layer = Before layer Forever End If ;user interface x = MouseX() y = MouseY() If x > 160 DrawImage currentimage,x,y If MouseHit(1) CreateTile(currentimage,x,y,currentlayer) End If End If If KeyHit(2) currentlayer = layer1 If KeyHit(3) currentlayer = layer2 If KeyHit(4) currentlayer = layer3 If KeyHit(200) MoveLayerUp(currentlayer) If KeyHit(208) MoveLayerDown(currentlayer) If KeyHit(57) Select currentimage Case image1 currentimage = image2 Case image2 currentimage = image3 Case image3 currentimage = image1 End Select End If Color 0,0,0 Rect 0,0,160,480,1 Color 255,255,255 Text 2,2,"left click to place" Text 2,16,"a tile." Text 2,40,"up to move layer up" Text 2,64,"down to move layer" Text 2,78,"down" Text 2,102,"1,2,3 to change" Text 2,116,"the current layer" Text 2,140,"space to change" Text 2,154,"tile image" Text 10,178,"current tile" DrawImage currentimage,40,192 y = 244 For layer.layers = Each layers If layer = layer1 If layer = currentlayer Color 0,128,0 Rect 2,y,156,20,1 Color 0,55,0 Rect 2,y,156,20,0 Color 255,255,255 Text 4,y,"layer 1" Else Color 128,128,128 Rect 2,y,156,20,1 Color 55,55,55 Rect 2,y,156,20,0 Color 0,0,0 Text 4,y,"layer 1" End If ElseIf layer = layer2 If layer = currentlayer Color 0,128,0 Rect 2,y,156,20,1 Color 0,55,0 Rect 2,y,156,20,0 Color 255,255,255 Text 4,y,"layer 2" Else Color 128,128,128 Rect 2,y,156,20,1 Color 55,55,55 Rect 2,y,156,20,0 Color 0,0,0 Text 4,y,"layer 2" End If ElseIf layer = layer3 If layer = currentlayer Color 0,128,0 Rect 2,y,156,20,1 Color 0,55,0 Rect 2,y,156,20,0 Color 255,255,255 Text 4,y,"layer 3" Else Color 128,128,128 Rect 2,y,156,20,1 Color 55,55,55 Rect 2,y,156,20,0 Color 0,0,0 Text 4,y,"layer 3" End If End If y = y + 20 Next Flip WaitTimer(timer) Until KeyDown(1)
Drawing Order in 2D Tile Editor
BlitzPlus Forums/BlitzPlus Programming/Drawing Order in 2D Tile EditorThe forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.