Boilà, je détaille maintenant la solution que je te proposait.
Elle est vraiment très simple à mettre en place.J'ai cependant pris la liberté de modifier légèrement la numérotation des tiles.
Le chipset reste le même, et les tiles sont numérotés de 1 à 9 en partant de la gauche vers la droite sur le chipset.
Dans un fichier en apparté, nommé map.lua, je stocke une carte sous forme de tableau 2D.
Code de 'map.lua'
map = {
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3},
{4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8},
{4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8},
{4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8},
{4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8},
{4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8},
{4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8},
{4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8},
{5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7},
}
Ensuite, dans le fichier principal index.lua, voici ce qu'il y a à faire.
D'abord, nous allons composer une fonction qui se charge de découper le chipset en tiles.Cette fonction retourne un tableau, qui contient des sous tableaux.Chaque sous tableau contient des coordonées x et y correspondant aux coordonnées sur le chipset de chaque tile.
Elle prend en argument le chipset, et la longueur de la tile.
function setTiles(chipset,tileWidth)
local tile = {}
local n_tile = math.floor(chipset:width()/tileWidth)
for i=1,n_tile do
table.insert(tile,{x = (i-1)*tileWidth,y=0})
end
return tile
end
Ensuite, nous allons concevoir une fonction qui dessine la carte en accord avec la table map.
function drawMap(map,chipset,tileset,tileWidth,tileHeight)
for y in ipairs(map) do
for x in ipairs(map[y]) do
local tileValue = map[y][x]
screen:blit((x-1)*tileWidth,(y-1)*tileHeight,chipset,tileset[tileValue].x,tileset[tileValue].y,tileWidth,tileHeight)
end
end
end
Enfin, il ne reste plus qu'à:
- charger la carte,
- charger le chipset, et le découper,
- afficher la boucle principale
dofile "map.lua"
local chipset = Image.load("chipset.png")
local tileset = setTiles(Image.load("chipset.png"),30)
while true do
screen:clear()
drawMap(map,chipset,tileset,30,30)
screen.waitVblankStart()
screen.flip()
end
Telecharger