Объекты бурундука падают через пол на высоких скоростях. Помогите? - PullRequest
1 голос
/ 13 февраля 2011

Я использую Chipmunk cocos2d для того, что в конечном итоге станет игрой для генерации звука, где сталкивающиеся частицы создают шум. Но сейчас я сталкиваюсь с проблемой: мои частицы продолжают падать сквозь пол!

В примерах шаблонов "прыгающий шар" множитель входящего потока акселерометра довольно низок (около 100,0f), но чтобы заставить вещи реагировать действительно быстро, я проверяю это:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)accel
{   space->gravity = cpvmult(cpv(accel.x, accel.y), 10000.0f); // originally 100.0f
}

Я обнаружил, что это можно улучшить, сделав dt очень маленьким, опрашивая акселерометр примерно на 1/240 секунды.

Это лучший способ? Есть ли другой способ сказать Бурундуку: «Берегись, эти вещи движутся быстро»?

1 Ответ

3 голосов
/ 13 февраля 2011

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

Два самых простых решения - использовать меньший интервал времени или как-то увеличить один из двух объектов. Как вы представляете слово? Если вы можете представить его в виде толстого прямоугольника, это также должно уменьшить проблему.

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

...