|
Опубликовано 12.03.2015 17:37 (10 лет назад) # |
А по каком принципу у тебя обработка коллизий происходит?
редакция от KeeperKira, 12.03.2015 17:38 |
|
|
|
Опубликовано 12.03.2015 17:41 (10 лет назад) # |
точнее запрет на проникание в стену
|
|
|
|
Опубликовано 12.03.2015 18:03 (10 лет назад) # |
Вот непосредственно код :) https://github.com/miriti/igdc120/blob/master/source/src/core/MapCollisionObject.js#L38
t это ячейка, с которой проверяется столкновение как с обычным AAB. this это объект который сталкивается :)
Вычисляется разность их положения по x и по y и если оба этих значения меньше чем сумма половин ширины и высоты соответственно, значит они сопрекасаются и потом если нужно (в случае с игроком и непроходимым тайлом нужно) отодвигаются в сторону меньшей разности.
Ну короче базовый алгоритм столкновений AAB :) |
|
|
|
Опубликовано 12.03.2015 18:40 (10 лет назад) # |
KEFIR написал:
Но подожди, в пакмане совсем другая механика передвижения персонажа: он там без остановки двигается, а пользователь только задает направление в нужный момент. А тут персонаж двигается когда удержаны соответствующие клавиши направления + сам персонаж чуть меньше чем клетка, также как это в оригинале.
Это не мешает сделать принудительное движение персонажа в центр клетки :)
Даже наоборот - просто просится, особенно если он немного меньше клетки. Движение сразу станет аккуратнее. |
|
|
Инженер‑космогоник
|
Опубликовано 12.03.2015 18:48 (10 лет назад) # |
KEFIR написал:
Так вот и как их срезать то? Я что-то не могу придумать.
На самом деле, если ты знаешь проверку и коррекцию(выталкивание) для AABB прямоугольников, двух кругов и круга с точкой(что в целом одно и то же - Пифагор наше все), то ты можешь сделать в произвольной комбинации фигуры нескольких разных форм, в том числе квадраты со скругленными углами. Конечно будет посложнее, чем по клеточкам, но было бы желание. По крайней мере гг можно сделать кружком или скруглить края стенок. Но мне кажется, что тут можно даже не заморачиваться и помогло бы скольжение вдоль стенок при движении по диагонали. |
|
|
Инженер‑космогоник
|
Опубликовано 12.03.2015 18:49 (10 лет назад) # |
Да, кстати, движение по клеточкам с промежуточной анимацией тоже прекрасный инструмент. |
|
|
|
Опубликовано 12.03.2015 19:08 (10 лет назад) # |
Интересненько. Спасибо за советы, может за ночь придет идеальное решение на основе всего этого :)
редакция от KEFIR, 12.03.2015 19:08 |
|
|
|
Опубликовано 12.03.2015 20:09 (10 лет назад) # |
В общем после отодвигания в сторону меньшей разности можно добавить ещё одну проверну. К какому из краёв стенки ближе объект и сделать сдвиг в ту сторону.
Тоесть давишь в верх, он входит в стену, его отталкивает назад, а потом ещё и отталкивает в сторону ближайшего прохода
как-то так
редакция от KeeperKira, 12.03.2015 20:12 |
|
|
|
Опубликовано 12.03.2015 20:21 (10 лет назад) # |
Игровой процесс ещё в начальной стадии развития. |
|
|
Инженер‑космогоник
|
Опубликовано 12.03.2015 20:45 (10 лет назад) # |
Ну это мягкие стены получаются. Не правильно так, к тому же можно в стенку продавиться. Тогда уж эффективнее сделать круглого гг и честные коллизии для него. Правило пересечения для квадрата простое, 3 проверки.
Если центр круга находится в пределах квадрата по x или по y, то находится простой разницей расстояние до линии квадрата(по y и x соответственно) и выталкивается, если это расстояние меньше радиуса.
Если круг не в этой зоне - по теореме пифагора находится расстояние до точек углов, если меньше радиуса - выталкивается вдоль вектора от точки угла до центра круга.
Если сделать просто выталкивание, без физики, то на углах круглый гг будет потихоньку продавливаться - ты толкаешь его на угол, он в него влазиет, коллизии выталкивают его чуть в бок - получается такое обтесывание угла.
В то же время в коридоре поведение будет честное - круг упрется в стенку и будет стоять.
|
|
|
|
Опубликовано 12.03.2015 22:51 (10 лет назад) # |
Выложу и свою систему коллизий для теста. Пилю бомбы |
|
|
|
Опубликовано 12.03.2015 23:18 (10 лет назад) # |
pelmenka,какой-то странный дребезг во время движения. Не знаю может это только у меня так. Но стены трясутся так что глаза вылазят.
Попробуй увеличить число свап слоёв. |
|
|
|
Опубликовано 13.03.2015 00:13 (10 лет назад) # |
Стены трясутся от того, что игрока выталкивает из стен. У меня еще есть версия где гг скачет от стен как шарик от пин понга |
|
|
|
Опубликовано 13.03.2015 05:54 (10 лет назад) # |
KeeperKira, я смотрю у тебя движение гг сделанно именно так, как предлагает Darthman? Т.е. он двигается строго по тайлам?
Вообще сейчас я думаю что действительно нет особого смысла делать игрока меньше тайла, как это было в оригинале. Но сначала попробую сделать игрока кругом. |
|
|
|
Опубликовано 13.03.2015 06:26 (10 лет назад) # |
У меня в прошлом билде реализовано по тайлам. Но так возникнет проблема проверки столкновений с врагами, если захочется сделать динамичную игрулю |
|
|
Древний организм
|
Опубликовано 13.03.2015 06:53 (10 лет назад) # |
С чего это вдруг оно возникнет? Ничего в проверке столкновений от этого не меняется |
|
|
Главный Говнюк
|
Опубликовано 13.03.2015 06:55 (10 лет назад) # |
У меня странный вопрос, как вы писали игры до этого, если у вас возникли проблемы с такими вещами?
Мою реализацию коллизий круга и линий, можно посмотреть в конкурсной работе "Свет и Тьма" №85 |
|
|
|
Опубликовано 13.03.2015 07:03 (10 лет назад) # |
С проскакиваниями вплотную к врагам я думаю могут быть проблемы при потайловом хождении |
|
|
|
Опубликовано 13.03.2015 08:08 (10 лет назад) # |
ZblCoder написал:
У меня странный вопрос, как вы писали игры до этого, если у вас возникли проблемы с такими вещами?
Мою реализацию коллизий круга и линий, можно посмотреть в конкурсной работе "Свет и Тьма" №85
Но причем тут круг и линия вообще?
Да и проблема то не в том, как это сделать вообще, а как сделать лучше и отзывчивее для игрока.
Сейчас стало ясно что обычный AAB не очень походит для такой игры, значит попробую что-то еще. |
|
|
Инженер‑космогоник
|
Опубликовано 13.03.2015 08:20 (10 лет назад) # |
Круг и линия - частный случай прямоугольника и круга. На ее основе можно половину физики построить. |
|
|