Пошук невключених плиток у грі на основі плитки


9

Я працюю над грою на 2D плитках, і зараз я намагаюся отримати 2d еквівалент об'ємів тіней для роботи. У мене виникають проблеми з пошуком поверхонь, які повинні відтінити тіні. З будь-якого моменту гри мені потрібно знайти нерозкриті обличчя, або всю плитку.

Моє запитання: як я можу знайти ці плитки / краї якнайшвидше, якщо дано крапку?

Зображення, що показує загальну лінію зору та уражені плитки

Відповіді:



2

Це не є повною відповіддю, але, сподіваємось, це допоможе.

Ваша карта / плитка встановлена ​​статично чи динамічно? Якщо це статично, я б наполегливо рекомендую вам робити офлайн-обробку і попередньо обчислювати скільки завгодно. Ви можете це зробити будь-яким способом (радіомовлення чи щось розумніше), але вам не дуже важливо робити дуже швидко, тому що це все відбуватиметься в режимі офлайн, поки ви "запекаєте" свої рівні. Ви можете або попередньо обчислити, які саме плитки видно з кожного місця, або створити якісь більші регіони та всі плитки, потенційно видимі з кожного регіону.

Тоді, під час виконання, запит на видимі плитки повинен бути дуже простим і дуже швидким.

Звичайно, якщо у вас є динамічно створені рівні, то це взагалі не застосовується :-)


1

Ви можете побачити , як я реалізував це на # рогалик C тут . Код не надто оптимізований, але він здається мені досить швидким і (що ще важливіше) його слід читати досить просто. Це в основному простий алгоритм лиття тіні, який працює по одному октанту за один раз.


0

Я не впевнений, на якій платформі ви перебуваєте, але я не можу реально придумати будь-яку платформу, яка не була б достатньо швидкою, щоб просто розробити коло навколо ваших супутникових світлів (якщо тільки їх багато) та виявити, чи плитка, яка збирається «побудувати» в алгоритмі кола, - це суцільна плитка і, таким чином, блокування. З цього моменту це буде дещо складніше, оскільки вам доведеться відслідковувати кругові сегменти, які є окклюдованими чи ні, але це було б, що я б робив. Іншим варіантом буде кидати промені по колу (знову ж таки досить швидко) в просторі роздільної здатності плитки і зупиняти кожен промінь, коли він потрапляє в суцільну плитку.


Ну, я здебільшого займаюся Flash та Javascript іграми, але в даний час я роблю такий метод грубої сили, який після трохи починає затухати. Я думаю, якщо я можу зрозуміти, як оптимізувати його, я можу зробити цю гру досить гладкою.
Райан С

Це може бути легко виконати у спалах, можливо, ваша груба сила може бути оптимізована. Крім того, загалом вам не потрібно оновлювати його кожен кадр, щоб ви могли перерахувати наступну ситуацію за пару кадрів
Kaj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.