# How to count how many tiles are there in a layer

## Recommended Posts

On 8/27/2014 at 3:12 PM, Guybrush said:

this works without any error for me even with null objects in the map.

```
for(var y = 0; y < map.height; ++y){   for(var x = 0; x < map.width; ++x){      var tile = map.getTile(x, y);      console.log(tile);   }}```

I found this ^ for looping through all the map. However, I just want to count how many tiles are there at the moment. Any help will be helpful friends.

##### Share on other sites

``````function howMany (map) {
var count = 0
for(var y = 0; y++; y < map.height) {
for(var x = 0; x++; x < map.width) {
count++
}
}
return count
}``````

Thats a basic solution that would work fine.

However, if you know the height and width and, crucially, you know you are not working with a sparse tile map then

``var count = map.width * map.height``

If your map is sparse and you want to query the total number of tiles often then its probably worth caching the count inside your map, something along the lines of

``````var map = {
width: 20,
height: 20,
count: 0,
tiles: createEmptyTilemap()

count++
tiles[x][y] = tile
},

removeTile: function(x, y) {
count--
tiles[x][y] = null
}
}``````

2d arrays (an array of arrays) are kind of a bit rubbish, its not a particularly efficient data structure and its fairly clunky to work with. A 1d array with some meta to describe its width is better, that way you can still use 2d lookups if you want but you have a slightly easier structure to work with underneath, of course, if your array is sparse you'll still have lots of redundant tiles.

If your tile map is sparse then you might want to simply use a list (an array) and only insert 'live' tiles, this means that each tile would need to have its own positional data and you'd either have to sort continually or not bother (there's seldom a requirement that it must be sorted).

If you have a multi-layer tilemap then you could make the assumption that the bottom layer is always filled but any tile can have any number of layers above that (items, more scenery, entities etc). It's tempting to use a 3d array for this but you can carry on with the 1d array, but have each tile contain data about the layers that it contains. This is the most efficient in terms of memory and can be more performant also but slightly more complex for the programmer.

Fun and games all this tiling stuff