Я піду прямо і скажу, що я не знаю, як вирішити проблему, яку ви описали в питанні (виявлення зіткнення між прямокутниками у формі плитки), але я можу вам сказати, як інші вирішували її в минулому :
Як це робиться в інших іграх - це відокремити ігровий світ від світу екрану . Коли ви починаєте, звичайно уявляти, що вони однакові, але тоді це призводить до проблем, подібних до тієї, яку ви описуєте.
Загальна думка полягає в тому, що світ ігор повністю зберігається в пам'яті, за лаштунками, це просто цифри, посилання та логіка. Те, що ви малюєте ігровий світ ізометричним, не має значення. У вашому ігровому світі не повинно бути поняття ізометричного чи квадратного, або навіть якщо екран малюється як 3D. Про все це береться, коли ти малюєш світ ігор на екран (він же світ екрану ). Ігровий світ повинен зберігатися та підтримуватися найпростішим способом, який має сенс для гри, в ізометричних іграх ви, як правило, повністю ігноруєте той факт, що це iso, а натомість зберігаєте позиції так, ніби ви використовуєте сітку, орієнтовану на вісь. У більшості ігор будуть методи перетворення координат між двома світами, я називаю свій ScreenToWorld(x, y)
іWorldToScreen(x, y)
. Перетворення часто проводиться з математикою Matrix, але може бути досягнуто іншими способами. Ви будете використовувати ScreenToWorld під час використання миші та WorldToScreen під час малювання.
Є кілька переваг у розділенні ігрового світу та світу екрану . Однією з переваг є те, що виявлення та рух зіткнень все відбувається в ігровому світі, і тому, як правило, досить прямо, тому що ви не маєте справу з похилою сіткою, косими координатами, або де знаходиться екран тощо. У вашому випадку , ви матимете справу з прямокутниками та квадратами, розташованими по осі. Після оновлення ігрового світу ви намалюєте зображення екрану на екрані, ключове слово: представлення. Спочатку це може здатися контрінтуїтивним, але ваш екран є лише відображенням того, що відбувається в ігровому світі. Це робить можливими такі речі, як виділені сервери та клієнти, подібні до терміналів.
FreeCiv - це насправді чудовий приклад усіх цих речей. Ви можете переглянути той самий точний світ, що і будь-який із: квадратну сітку Північ / Південь, Ізометричну або навіть Шестнадцятку. У кожній грі, яку ви запускаєте, є виділений сервер, який працює у фоновому режимі, навіть для однокористувацьких ігор, тому клієнт - це також лише порт дисплея, не більше того.
Короткий виклад історії: відокремлення ігрового світу та логіки від екранного світу спрощує логіку гри, зменшує ігрове <-> з’єднання дисплея та, в свою чергу, робить виявлення зіткнень між плитками "iso" простішими в обробці та простішими для візуалізації.