「ランプ」と+1の高さのタイルがある場合に、マウスの下に正しい「アクティブ」タイルを取得する方法を理解しようとしています(下の図を参照)。
私の世界がフラットなときは、すべてが問題なく機能します。高さ +1 のタイルを追加し、ランプを +0 に戻しても、画面 -> マップ ルーチンはすべてが「フラット」であるかのように見えます。
上の図で、緑の「ランプ」は、レンダリングしてマウス -> マップを計算したい実際のタイルですが、「下」に表示されている青いタイルは、計算される領域です。したがって、マウスを濃い緑色の領域のいずれかに移動すると、別のタイルにいると見なされます。
これが私のマップレンダリングです(非常に単純です)
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();
}
}
そして、ここに私のマウス - >マップルーチンがあります:
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];
単純な画面 -> マップ ルーチンではなく、最初からやり直して、ワールド ベースのマップ システムを実装する必要があると感じています。
ありがとう。