Есть ли разумный простой способ реализовать свободное движение в изометрической игре на основе тайлов? Это означает, что игрок не просто мгновенно перепрыгнет с одной плитки на другую или не будет «привязан» к сетке (например, если движение между плитками было анимированным, но вы не сможете ничего сделать до завершения анимации). Я действительно новичок во всем, что связано с программированием игр, но с помощью этого сайта и некоторых других ресурсов было довольно легко сделать основные вещи, но я не смог найти никаких полезных ресурсов для этой конкретной проблемы. ,
В настоящее время я импровизировал что-то похожее на это: http://jsfiddle.net/KwW5b/4/ (движение WASD). Идея движения заключалась в том, чтобы использовать карту мыши, чтобы определить, когда игрок переместился на другую плитку, а затем перевернуть смещения, и по большей части это работает правильно (каждый угол заставляет игрока перемещаться в неправильное место: см. Http: //www.youtube.com/watch?v=0xr15IaOhrI , что, вероятно, связано с тем, что я не смог правильно настроить полную карту мыши), но у меня нет иллюзий, что она даже близка к хорошему / нормальному решению. И вообще, это в основном просто для демонстрации того, что я хотел бы реализовать.
источник
Ответы:
Прежде всего, я предлагаю вам изменить направление с: W - вверх-влево S - вниз-вправо A - вниз-влево D - сверху-справа
в более интуитивный: W - вверх S - вниз A - влево D - вправо
Что касается вас, я предлагаю вам сделать две функции, одну из которых переводить изометрические координаты плитки в координаты сетки, а другую - наоборот. Таким образом, вы можете просто отделить MVC, и это сделает вашу жизнь проще при вычислении активной плитки:
источник
Если я понимаю, вы хотите, чтобы игрок переместил плитку на плитку, но без прыжков. Вы можете:
1 - начать с тайла t0 и смещения 0
2- Когда игрок переходит на тайл t1, установите смещение = - (t1 - t0)
3- В обновлении проигрывателя, если смещение не равно 0, уменьшите, используя время обновления и скорость проигрывателя.
4- Йо может использовать проверку смещения == 0, чтобы узнать, когда игрок находится на тайле.
При этом вы получаете игрока, который свободно перемещается по карте, но прилипает к плиткам.
источник