Próbuję dowiedzieć się, jak uzyskać prawidłową "aktywną" płytkę pod myszką, gdy mam "rampę" i +1 wysokość płytek (patrz rysunek poniżej).Izometryczny ekran mapy
Kiedy mój świat jest płaski, wszystko działa bez problemu. Po dodaniu kafelka o wysokości +1, wraz z pochylnią cofającą się do +0, mój ekran -> rutynowa mapa nadal wygląda tak, jakby wszystko było "płaskie".
Na powyższym zdjęciu zielona "rampa" to prawdziwa płytka, którą chcę renderować i obliczyć kursor -> map, jednak niebieski kafelek "poniżej" to obszar, który jest obliczany. Jeśli więc przesuniesz mysz w jeden z ciemnych, zielonych obszarów, myślisz, że jesteś na innej płytce.
Tu jest moja mapa render (bardzo prosty)
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();
}
}
A oto moja mysz -> Mapa rutyna:
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];
mam wrażenie, muszę zacząć od nowa i wdrożenia światowy system map, a nie prosty ekran -> rutynowe mapy.
Dzięki.