Je suis en train de crér un petit MMMMMPORPG isométrique
Pour faire original j'ai décidé de le créer avec la toute nouvelle technologie qui nous arrive avec HTML5, Canvas.
function draw_map() {
for(x = 0; x < map_array.length; x++) {
for(y = 0; y < map_array[x].length; y++) {
var terrain = map_array[x][y];
$("#map").draw(function(context) {
var img = new Image();
img.src = 'img/tiles/'+terrain+'.png';
context.drawImage(img, x * tile_width, y * tile_height);
});
}
}
}
Jusqu'ici tout va bien.
Mon problème
J'ai pas fait exprès de prendre des tiles Wakfu
</span>
Je me suis vite rendu compte en me renseignant un peu qu'il fallait une solide gestion de la superposition des tiles.
Pour cela, en HTML quand je faisais mon RPG avec des div j'utilisais le z-index. (j'avais un div pour une tile)
Avec Canvas, les éléments sont ordonnés au fur et à mesure qu'ils sont dessinés; et je ne vais certainement pas créer un canvas par tile Je voudrais donc savoir si vous avez des idées pour me tirer de ce problème.
J'ai une petite piste : créer un autre array avec l'index de chaque tile, mais je ne vois pas quoi faire ensuite...
En gros, je ne vois pas comment ordonner les éléments pour leur superposition dans le Canvas.
Ceci dit, je vous serait infiniment reconnaissant pour vos idées et vos pistes. Je bloque vraiment.
Merci d'avance !
Ca dépend du nombre de niveau que tu as. Si t'en à que 2 (en dessous et au dessus du perso), je te conseil de faire deux passages (d'abord le sol, puis les obstacles).
Le tuto est en cours mais avec un peu de patience et tu auras toutes les infos que tu voulais.
C'est sur que dessiner d'un sens à l'autre permet déjà d'avoir une gestion des index pour éviter ce problème.
Mais imagine maintenant que je veuille construire un bâtiment : il faudra a un moment ou à un autre bricoler l'index d'une tile pour avoir un rendu correct
Hum, encore une fois, ça dépend de ton bâtiment. Ce que je ferais moi, c'est, au lieu de dessiner les images à partir de leur coins haut-gauche utiliser celui bas-droite.
Toutes tes images tu les dessines en position x - Largeur et y - hauteur.
Ainsi, quand tu vas dessiner un bâtiment, il va se superposer au tiles déjà placées et suivantes seront en dessous.
Personnellement j'utilise un système de couche pour mon jeu (qui n'est par contre pas isométrique). Ainsi je dessine mes couches les unes après les autres (sol, objet, personnages etc.). Par défaut quand tu dessine un truc, celui-ci va par dessus les autres trucs déjà dessiné mais tu peu modifié ça : lien.
En effet, j'utilise moi aussi ce petit système de couches, évidemment je dessine les personnages après les tiles.
Mais mon problème ne se pose que pour la couche des tiles : pour avoir un éditeur de tiles à couches, il faut d'une part que l'index de la tile soit stockée dans ma base de donnés et d'autre part que le client JS puisse restituer l'ordre.
Or, les tiles se créent dans une boucle. Comment pourrais-je alors tenir compte de l'index ?
C'est juste un problème de pure logique pourtant
J'ai pensé à faire un array index en plus de celui des terrains, mais je ne vois VRAIMENT pas comment le mettre en place
Salut, pour mettre à jour les objets par z-index d'un tableau, il te suffit de trier ton tableau avant par ordre du z-index le plus petit, jusqu'au plus grand
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Je ferme ce sujet. En cas de désaccord, me contacter par MP.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
Pas d'aide concernant le code par MP, le forum est là pour ça :)