Tiling Physics с использованием Farseer

9

У меня возникла проблема с Farseer Physics Engine, где в мозаичной среде мой объект иногда взаимодействует с углами других объектов, даже если они идеально выровнены.

Tiling Physics с использованием Farseer

Я читал о людях, предлагающих вам рассчитать и создать один более крупный объект, используя Марширующие квадраты или что-то подобное. Однако это не вариант, так как я хотел бы, чтобы каждая плитка имела разные физические качества, например, различное трение и восстановление.

Мой вопрос в том, что именно вызывает это, это проблемы точности с плавающей точкой или что-то еще? И есть ли способ это исправить, не сломав весь физический движок?

Уильям Мариажер
источник
Интересно, можно ли просто расширить поля столкновений на один пиксель, чтобы они немного перекрывали друг друга. Возможно, он увидит поверхность более связанной.
Doug.McFarlane
@Doug: Я только что проверил это, и это не имело никакого значения.
Уильям Маригер
Являются ли земляные плитки статичными телами?
Буммзак
@bummzack: Да, они есть.
Уильям Маригер
У меня точно такая же проблема. Я получаю эффект «подпрыгивания», когда моим подвижным объектом является прямоугольник или круг. Я также не могу конвертировать несколько квадратов в один большой прямоугольник, потому что я хочу, чтобы у игрока была возможность «удалять» отдельные плитки в определенных ситуациях.

Ответы:

5

Farseer использует итеративный решатель, поэтому, когда ваше колесо начинает сталкиваться с другим прямоугольником на высокой скорости, время от времени вы будете сталкиваться с неровностями, поскольку это «идеальное выравнивание» для нас, а не для моделирования физики, с итерациями, подобными этим, будет никогда не будь "идеальным по пикселям".

Вам придется преобразовывать прямоугольники в формы Edge / Loop, а затем моделировать различные физические качества с помощью хаков, таких как создание искусственных границ плитки и затем изменение свойств, когда персонаж входит в ограничивающий прямоугольник, но не все физические качества можно эмулировать таким образом.

Рано или поздно вы закончите писать свою физику на основе тайлов вместо Farseer. Если в вашей игре нет множества сложных головоломок по физике, будет проще полностью отказаться от Farseer и бросить свою собственную физику на основе плиток.

EnoughTea
источник
На самом деле я начал писать свой собственный физический движок, специально для этого движка, так как кажется, что нет элегантных решений.
Уильям Маригер
Я решил пометить это как ответ, так как, похоже, простого решения не существует, и вам будет лучше написать собственное решение. Или признайте, что у вас не может быть другой физики, и используйте Марширующие квадраты, чтобы сделать большие тела.
Уильям Маригер
0

Вы можете оптимизировать свои формы столкновений, эта сцена может быть сделана только с четырьмя прямоугольниками.

Вы можете присоединиться к соответствующим ячейкам, чтобы увеличить их.

это видео показывает это http://www.youtube.com/watch?v=eyhGckHgkkE

когда он добавляет поля, вы можете видеть светло-голубой прямоугольник с оптимизированной формой.

Blau
источник
1
Как я сказал в третьем абзаце, превращение группы объектов в более крупный объект не вариант, так как я бы потерял отдельные свойства.
Уильям Маригер
Вы можете также сгруппировать их по их физическим свойствам. я думаю, что это не очень обычно иметь много разных физических блоков вместе.
Блау
Группировка их по физическим качествам создала бы мне ту же проблему, если бы ландшафт сильно изменился. Это может быть необычно, но тем не менее это то, что мне нужно.
Уильям Маригер
0

Хм ... Я подозреваю, что это может иметь какое-то отношение к вашему кругу, а не к плиткам под ним. Попробуйте сделать землю, используя один корпус, и посмотрите, получите ли вы те же результаты. Если нет, это плитки, как вы подозреваете. Если это так, ваш круг не такой круглый, как вы могли бы подумать.

Джон Макдональд
источник
Я проверял это. При использовании одного большого прямоугольника проблем нет.
Уильям Маригер
k, плитки - проблема тогда
Джон Макдональд