我试图找出如何在我有“坡道”和+1高度瓷砖(见下图)时,在鼠标下获取正确的“活动”瓷砖。
当我的世界是平的时候,一切都没有问题。一旦我添加一个高度为+1的瓷砖,再加上一个返回到+0的坡道,我的屏幕->地图例程仍然看起来像一切都是“平的”。
在上面的图片中,绿色的“坡道”是我想要渲染和计算鼠标->地图的实际瓷砖,但你看到“下面”的蓝色瓷砖是被计算的区域。所以,如果你把鼠标移到任何深绿色区域,它会认为你在另一个瓷砖上。
这是我的地图呈现(非常简单)。
我有一种感觉,我将不得不重新开始实现一个基于世界地图系统而非简单的屏幕 -> 地图程序。谢谢。
当我的世界是平的时候,一切都没有问题。一旦我添加一个高度为+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];
我有一种感觉,我将不得不重新开始实现一个基于世界地图系统而非简单的屏幕 -> 地图程序。谢谢。