Isometrischer Bildschirm zur Karte

Ich versuche herauszufinden, wie ich die richtige "aktive" Kachel unter der Maus finden kann, wenn ich "Rampe" und +1 Höhenkacheln habe (siehe Bild unten).


Wenn meine Welt flach ist, funktioniert alles problemlos. Sobald ich eine Kachel mit einer Höhe von +1 und einer Rampe auf +0 hinzufüge, sieht meine Bildschirm-> Kartenroutine immer noch so aus, als wäre alles "flach".

Auf dem Bild oben ist die grüne "Rampe" die reale Kachel, die ich rendern und berechnen möchte. Maus -> Karte. Auf der blauen Kachel, die Sie "darunter" sehen, wird jedoch die Fläche berechnet. Wenn Sie also Ihre Maus in einen der dunkelgrünen Bereiche bewegen, denken Sie, dass Sie sich auf einem anderen Feld befinden.

Hier ist meine Karte rendern (sehr einfach)

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();

    }
}    

Und hier ist meine Maus -> Kartenroutine:

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];

Ich habe das Gefühl, ich muss von vorne anfangen und ein weltbasiertes Kartensystem implementieren, anstatt einen einfachen Bildschirm -> Kartenroutine.

Vielen Dank

Antworten auf die Frage(4)

Ihre Antwort auf die Frage