Я пытаюсь выяснить, как получить правильную «активную» плитку под мышью, когда у меня есть плитки «рампа» и +1 высота (см. Рисунок ниже).
Когда мой мир плоский, все работает без проблем.Как только я добавляю плитку с высотой, скажем, +1, вместе с рампой, возвращающейся к +0, моя процедура screen -> map по-прежнему выглядит так, как будто все «плоско».
На картинке вышезеленая "рампа" - это реальная плитка, которую я хочу визуализировать и рассчитать мышью -> карта, однако синяя плитка, которую вы видите "под", - это вычисляемая область.Поэтому, если вы переместите указатель мыши в любую из темно-зеленых областей, она подумает, что вы находитесь на другой плитке.
Вот мой рендер карты (очень простой)
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];
У меня такое чувство, что мне придется начинать сначала и внедрять систему карт мира, а не простой экран -> подпрограмма карты.
Благодаря.