Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pymunk中动态实体和移动静态实体之间创建阻尼旋转弹簧_Python_Pygame_Physics_Chipmunk_Pymunk - Fatal编程技术网

Python 在pymunk中动态实体和移动静态实体之间创建阻尼旋转弹簧

Python 在pymunk中动态实体和移动静态实体之间创建阻尼旋转弹簧,python,pygame,physics,chipmunk,pymunk,Python,Pygame,Physics,Chipmunk,Pymunk,我试着做标题上说的事。我有一个角色的手上绑着一把枪,我试图让枪指向光标。我认为阻尼旋转弹簧是一种很好的方法,但事实证明并不是那么简单。枪是一个具有分段形状的动态实体,对于光标,我创建了一个静态实体,在每一步中,我将其位置设置为鼠标位置 当我运行程序时,除了重力或碰撞的影响,枪根本不会移动 以下是相关代码: # add crosshairs at the location of the mouse pointer_body = pymunk.Body() pointer_shape1 = pymu

我试着做标题上说的事。我有一个角色的手上绑着一把枪,我试图让枪指向光标。我认为阻尼旋转弹簧是一种很好的方法,但事实证明并不是那么简单。枪是一个具有分段形状的动态实体,对于光标,我创建了一个静态实体,在每一步中,我将其位置设置为鼠标位置

当我运行程序时,除了重力或碰撞的影响,枪根本不会移动

以下是相关代码:

# 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) )
编辑:

下面是我所有代码的主要存储库:。
主循环在ragdoll.py中。

可能是弹簧参数的问题?刚度和阻尼看起来很低,除非枪非常轻

查看我昨天添加到pymunk的代码示例:


(当旋转在正负pi之间翻转时,会发生一件事,我会看一下)

要点中的代码的问题是,您将枪连接到手上,用两个关节将它们保持在同一位置和相同的旋转。然而,手是一个胭脂身体,不会旋转。因此,当枪与光标之间的弹簧拉动枪时,枪不会旋转,因为另一个关节更牢固

我不确定你到底想怎么设置,但你可以看到,如果你从枪的手上拆下RotaryLimitJoint,一切都能正常工作

查看代码的固定分支以了解确切的细节:

我为发现问题所做的后续故障排除的一些提示:

  • 把所有东西都放大10倍,这样就很容易看到发生了什么。我知道pymunk只画一种尺寸,但在代码中所有尺寸的末尾添加一个0很容易
  • 使手不移动,以便更容易看到它是如何旋转的(删除了更新\u hand\u position方法中的所有内容)
  • 禁用场景中所有形状之间的碰撞,以便旋转枪不会受到某些身体部位的阻碍。(对space.shapes和ran-shape.group=1进行了简单循环)

  • 我的代码现在几乎与你的完全匹配,但出于某种原因,它仍然无法工作。一定是我忽略了一些小错误。我已经在我的原始帖子中发布了一个链接,指向我所有代码的要点。我试图删除RotaryLimitJoint,但它仍然不起作用。我尝试了你所有的建议,但我看不出有什么不同。我理解你的意思,这对我来说很有意义,但出于某种原因,它不起作用。我编辑了这篇文章,其中有一个指向工作代码的链接,我希望这会有所帮助。当我从枪上移除角速度限制时,枪会随着角度的增加而上下移动。枪的角度仍然没有改变。可能会发生什么?如果我打印枪的角度(在主循环中打印me.gun.body.angle),它会按照预期发生变化?我打印枪的角度,但它仍然只会发生微小的变化(在e-16的顺序上)。角度的变化量与角速度限制的变化量相同。但是,枪现在随着光标的移动而垂直移动。我不知道为什么。我也在打印右手的角度,这也不会改变。