J'essaie de comprendre comment obtenir la bonne tuile «active» sous la souris lorsque j'ai des tuiles «rampe» et +1 (voir l'image ci-dessous).Écran isométrique sur la carte
Quand mon monde est plat, tout fonctionne sans problème. Une fois que j'ajoute une tuile avec une hauteur de dire +1, avec une rampe qui remonte à +0, ma routine écran -> carte semble toujours comme si tout était "plat".
Dans l'image ci-dessus, la "rampe" verte est la vraie tuile que je veux rendre et calculer la souris -> carte, cependant la tuile bleue que vous voyez "ci-dessous" est la zone qui est calculée. Donc, si vous déplacez votre souris dans l'une des zones vert foncé, il pense que vous êtes sur une autre tuile.
Voici ma carte render (très simple)
canvas.width = canvas.width; // cheap clear in firefox 3.6, does not work in other browsers
for(i=0;i<map_y;i++){
for(j=0;j<map_x;j++){
var xpos = (i-j)*tile_h + current_x;
var ypos = (i+j)*tile_h/2+ current_y;
context.beginPath();
context.moveTo(xpos, ypos+(tile_h/2));
context.lineTo(xpos+(tile_w/2), ypos);
context.lineTo(xpos+(tile_w), ypos+(tile_h/2));
context.lineTo(xpos+(tile_w/2), ypos+(tile_h));
context.fill();
}
}
Et voici ma souris -> routine de carte:
ymouse=((2*(ev.pageY-canvas.offsetTop-current_y)-ev.pageX+canvas.offsetLeft+current_x)/2);
xmouse=(ev.pageX+ymouse-current_x-(tile_w/2)-canvas.offsetLeft);
ymouse=Math.round(ymouse/tile_h);
xmouse=Math.round(xmouse/(tile_w/2));
current_tile=[xmouse,ymouse];
j'ai un sentiment que je vais devoir recommencer et mettre en œuvre un système de carte basé sur le monde plutôt qu'un simple écran -> routine de carte.
Merci.