در حال تبدیل مختصات صفحه به نقشه در یک موتور کاشی شش ضلعی ایزومتریک؟

من در حال کار بر روی یک بازی TBS هستم که یک شبکه شش ضلعی با این حال ، من می خواستم این ایزومتریک باشد (زیبا و پیکسلی به نظر می رسد) و موتور کاشی کاری به خوبی کار می کند ، این نتیجه:

با این حال ، برای دستیابی به این هدف ، مجبور شدم مقادیر (اندازه کاشی ، الگوریتم کاشی کاری) را بیاموزم تا کاشی ها به درستی متناسب شوند. در اینجا مثالی از کاشی آورده شده است:

اندازه کاشی 62x32 است و هنگام کاشی کاری ،هر کاشی 47 (cw) بر روی x و 16 (ch) بر روی y حرکت داده می شود تا به درستی قرار بگیرد.

اینگونه محاسبه می کنم که مختصات صفحه (برای ترسیم کاشی) از مختصات نقشه:

function toScreen(x, y, z, offset)
{
    offset = ifndef(offset, {x: 0, y: 0});
    var ret = new Vector2D(y*Tile.cw + x*Tile.cw -offset.x, -x*Tile.ch + y*Tile.ch -offset.y -z*16);
    ret.y += (Tile.height*this.h)/2; //center the map on screen
    return ret;
}

اکنون ، من باید باشم قادر به انتخاب کاشی ها و گرفتن مختصات نقشه از مختصات صفحه (ماوس) است. نمی توانم بفهمم که آیا حتی می توان مختصات را به نوعی تغییر داد (تمام تلاش های من ناموفق بود).

سیستم مختصات نقشه و نحوه ترسیم کاشی به این شکل است:

انتخاب کاشی ها البته باید کاملاً پیکسل باشد ، اما فقط برای کاشی های مسطح (نیازی به انتخاب درختانی نیست که از کاشی بالا عبور کنند) ، بنابراین الگوریتم می تواند صاف بودن همه کاشی ها را فرض کند ( مانند آنچه من به عنوان مثال آورده ام). آیا کسی ایده ای در مورد چگونگی انجام این کار دارد؟ من می توانم آن را "بی رحمانه" کنم ، با تبدیل کاشی در [0،0] به فضای صفحه نمایش ، و دیدن اینکه آیا نشانگر درون آن است یا چقدر فاصله دارد ، سپس به آرامی کاشی به کاشی را راه می روم تا زمانی که پیدا کنم کاشی که شامل مختصات ماوس باشد (یا هیچ کاشی وجود ندارد) ، اما من در صورت وجود یک راه حل زیبا تر به دنبال آن هستم.

آیا کسی ایده ای دارد؟

متشکرم.

11
задан fingerprint211b 7 July 2011 в 15:37
поделиться