我正在努力做标题所说的。我有一个用枪约束在手上的角色,我试图让枪指向光标。我认为DampedRotarySpring是一个很好的方法,但结果并不那么简单。枪是一个动态的身体,有一个Segment形状,对于光标,我创建了一个静态的身体,其位置我设置到鼠标位置,每一步都有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。
答案 0 :(得分:2)
要点中的代码问题在于,您已将枪连接到带有两个关节的手上,以使它们保持在同一位置并保持相同的旋转。然而,手是胭脂体并且不会旋转。因此,当弹簧在弹簧和光标之间被弹簧拉动时,枪不会旋转,因为其他关节更强。
我不确定你想要如何设置,但你可以看到,如果从枪手中移除RotaryLimitJoint,它一切正常。
查看代码的固定分支以获取确切的详细信息:https://gist.github.com/4505219
我为解决问题所做的一些未来故障排除提示:
答案 1 :(得分:0)
也许你的问题在于弹簧参数?除非枪非常轻,否则刚度和阻尼看起来非常低。
查看我昨天添加到pymunk的代码示例:http://code.google.com/p/pymunk/source/browse/trunk/examples/damped_rotary_spring_pointer.py
(在我看到的正负pi之间翻转时,旋转有一件事情发生了)