SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Дергание камеры во время столкновения с стеной
В этой теме 7 ответов, 4 участника, последнее обновление Alex 7 года/лет, 9 мес. назад.
-
АвторСообщения
-
Всем доброго времени суток.
Есть проблема в том, что при столкновении спрайта персонажа со спрайтом стены персонаж и камера начинает дёргаться.
Почему так, ясно: камера прикреплена к координатам игрока, а при столкновении со стеной игрока отталкивает от нее, оттуда и такой ефект.
Но как исправить такую ситуацию? Надо ли привязывать камеру не к координатам персонажа, а к чему то другому, или перемещать камеру за персонажем не пиксель в пиксель, а с некой “задержкой”.
Если надо привести какой-либо код – говорите))
Заранее спасибо)
Как вариант сделать плавное следование камеры за персонажем, чем персонаж дальше от центра камеры, тем быстрее она следует.
Спасибо, попробую.
еще можно заменить выталкивание объекта от стены,просто остановкой возле стены,я решил проблему именно так,тогда где остановится объект,остановится и камера,кстати в самом коде урока манипулируя величинами можно добиться подобного эффекта
Под остановкой возле стены, вы имеете ввиду обнуление переменных-ускорений по осям?
Почему-то обнуление не работает, в том смысле, что персонаж не останавливается. Я проверял – сами переменные обнуляются а персонаж двигается. Пробовал размещать вызов апдейта для стен, и до, и после апдейт для героя, разницы нет.
Не подскажете в чем может быть причина?
Решить ету проблему легко просто добавить код который не даст камере выходить за пределы карты. Пример :
C++123456float vievposX = pos.x; float vievposY = pos.y;if (pos.x < 400) vievposX = 400;if (pos.x > 2800) vievposX = 2800;if (pos.y < 300) vievposY = 300;if (pos.y > 560) vievposY = 560;view.setCenter(vievposX, vievposY);vievpos позиция камеры, pos позиция игрока. То есть если игрок подходит к краю карты позиция камеры фиксируеться.
нет все намного проще,я заменил код из урока, берешь координаты объекта и при столкновении пишешь if(Dx>0){x= x-1;} и так далее,цифру подгоняшь по надобности игры ,так работает проще и надежнее,особенно в изометрической карте где параметры по другому сходятся
то есть получается функция x += dx*time; прибавляет,а if(Dx>0){x= x-1;} отнимает ,соответственно если подобрать нужное число то можно добиться что x будет неизменно и персонаж просто остановится
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.