タイトル通りのことをやってみました。手に拘束された銃を持つキャラクターがいて、銃をカーソルに向けようとしています。DampedRotarySpring が良い方法だと思いましたが、それほど単純ではないことがわかりました。銃はセグメント形状の動的ボディであり、カーソル用に、各ステップで pygame を使用してその位置をマウスの位置に設定する静的ボディを作成します。
プログラムを実行すると、重力または衝突の影響を除いて、銃はまったく動きません。
関連するコードは次のとおりです。
# add crosshairs at the location of the mouse
pointer_body = pymunk.Body()
pointer_shape1 = pymunk.Segment(pointer_body, (0,CROSSHAIRS_SIZE), (0,-CROSSHAIRS_SIZE), 1) # vertical segment
pointer_shape2 = pymunk.Segment(pointer_body, (-CROSSHAIRS_SIZE,0), (CROSSHAIRS_SIZE,0), 1) # horizontal segment
# add a spring that will angle the gun toward the mouse
spring = pymunk.DampedRotarySpring(me.gun.body, pointer_body, 0, 0.01, 1)
space.add(pointer_shape1, pointer_shape2, spring)
while True:
# handle event queue
for event in pygame.event.get():
if event.type == pygame.MOUSEMOTION:
from math import atan2
# update location of pointer
pointer_body.position = flipy(pygame.mouse.get_pos())
pointer_body.angle = atan2( (pointer_body.position.y - me.gun.body.position.y), (pointer_body.position.x - me.gun.body.position.x) )
編集:
ここに私のすべてのコードの Gist リポジトリがあります: https://gist.github.com/4470807。メイン ループは ragdoll.py にあります。