Как реализовать движущиеся платформы с помощью Cocos2d, TMXTiledMaps и Chipmunk

Я делаю медленный, но стабильный прогресс с игрой на Cocos2d, но я застрял в создании движущихся платформ.

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

----------
--------x-
-xxx----x-
----------

вместо 5 отдельных тел (прямоугольников) есть два тела: одно - шириной в три плитки, другое - высотой в две плитки.

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

Однако тела должны перемещаться вместе с плитками, чтобы это работало должным образом. И здесь я застрял. Тела имеют статическую массу, так что ...

платформаShape-> body-> p = cpv (x, y);

Ничего не делает (я предполагаю, что это ожидаемое поведение).

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

Мой вопрос; Кто-нибудь реализовывал что-то подобное раньше и какова была ваша методика? Или, если бы вы реализовали что-то подобное, как бы вы это сделали?

Соответствующий код находится здесь. Я положил его в пастебин, так как считаю, что это скорее концептуальное недоразумение, чем что-либо еще.


person gargantuan    schedule 13.11.2009    source источник


Ответы (1)


Оказывается нужно позвонить

cpRehashStaticShapes

Совершенно очевидно, но, на мой взгляд, его легко упустить.

person gargantuan    schedule 15.11.2009