pymunk - Есть ли стандартный способ установить пользовательскую гравитацию для объекта?

В документации pymunk написано, что гравитация для сцены «по умолчанию равна (0,0). Может быть переопределена для каждого тела путем написания пользовательских функций интеграции». Как бы вы написали пользовательские функции интеграции для изменения гравитации объекта (например, если у меня есть объект на лестнице, я хочу, чтобы его гравитация была равна 0, но в противном случае я хочу, чтобы гравитация для этой сцены существовала)? Если это имеет значение, я все еще на Python 2.


person berryline    schedule 27.01.2020    source источник


Ответы (1)


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

>>> import pymunk
>>> space = pymunk.Space()
>>> space.gravity = 0, 10
>>> body = pymunk.Body(1,2)
>>> space.add(body)
>>> def zero_gravity(body, gravity, damping, dt):
...     pymunk.Body.update_velocity(body, (0,0), damping, dt)
... 
>>> body.velocity_func = zero_gravity
>>> space.step(1)
>>> space.step(1)
>>> print(body.position, body.velocity)
Vec2d(0.0, 0.0) Vec2d(0.0, 0.0)

Функция скорости задокументирована здесь: http://www.pymunk.org/en/latest/pymunk.html#pymunk.Body.velocity_func

person viblo    schedule 28.01.2020