Я перевіряю зіткнення щодо персонажа платформера, як показано на №1. Червоні точки - це пікселі, які перевіряються, а сірі лінії вказують на осі, до яких вони відносяться. Мені подобаються результати, отримані від перевірки зіткнення таким чином (проти, скажімо, обмежувального поля). Все працює саме так, як мені б хотілося, за винятком однієї проблеми: виявлення розчавлення.
На наступних зображеннях світло-синій ящик являє собою землю, помаранчевий ящик - предмет, а стрілки вказують напрямок руху.
Просте рішення для виявлення, коли гравця розбито, - це побачити, чи спрацьовують точки зіткнення на протилежних сторонах. Якщо вони є, гравця розчавлюють. У №2 ви можете побачити звичайний сценарій розчавлення. Гравець заземлений, а верхні точки зіткнення перетинаються з падаючим об'єктом. Це запускає розчавлення.
№3, 4 та 5 представляють проблемні сценарії. У №3 гравець рухається до об'єкта, який рухається вгору. Точка зіткнення правою стороною вдаряється об об’єкт, спричиняючи зіткнення та зупиняючи гравця.
Тепер, якщо об’єкт продовжує рухатися вгору, а гравець продовжує рухатись праворуч (як показано на №4), об'єкт очищає точку зіткнення правої сторони гравців, а гравець рухається праворуч. Але тепер, зробивши це, об’єкт перетинає верхню точку зіткнення, викликаючи небажане вертикальне розбиття.
Аналогічний сценарій показаний у №5. Два об'єкта достатньо далеко, щоб знизити точки зіткнення в нижній частині, що дозволяє гравцеві впасти, але ні до того, щоб дозволити очищення бокових точок зіткнення, що спричинило небажане горизонтальне розбиття.
Я ламав мозок над рішенням, але нічого, що я придумав, не працювало особливо добре, тому мені цікаво, чи хтось там має ідею чи уявлення про те, як вирішити ці проблеми.
Щоб усунути деяку плутанину, червоні точки зіткнення були б у спрайті, а сірі лінії використовувались лише для позначення відповідної осі для кожної точки зіткнення. Наприклад, якби спрайт символу був простим зеленим квадратом, точки зору виглядали б приблизно так: