首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pymunk/Chipmunk2d -动态物体与静态物体碰撞产生排序脉冲

Pymunk/Chipmunk2d -动态物体与静态物体碰撞产生排序脉冲
EN

Stack Overflow用户
提问于 2019-10-26 10:46:54
回答 1查看 613关注 0票数 0

静态物体能将碰撞脉冲应用于动态物体吗?

下面是我的代码所做的一些记录:

正如你所看到的,两个动态三角形相互碰撞,并被静止线所阻止。然而,这种行为并不是我想要的。如果我只有一个三角形,它就会在一个顶点上滑行,静止的物体不会在三角形上施加任何扭矩或反力(我不是物理学家)。

这是否意味着我应该用动态物体作为障碍物,具有很高的质量?我使用静态障碍的理由是,我计划在我的模拟中设置很多障碍,动态物体会撞上它们。用动态物体来构建整个环境是否可行?我遗漏了什么?

顺便说一下,我使用pymunkpygame。感谢任何我能得到的帮助

代码语言:javascript
复制
import pygame
import pymunk
import pymunk.pygame_util

pygame.init()
screen = pygame.display.set_mode((1000, 500))

space = pymunk.Space()
space.gravity = 0, -0.07

# triangle creation func, takes position arguments
def create_tri(x, y):
    pos = pygame.math.Vector2(x, y)
    points = (0, 0), (50, 0), (25, 50)

    moment = pymunk.moment_for_poly(1, points)
    body = pymunk.Body(1, moment)
    body.position = pos

    shape = pymunk.Poly(body, points)
    return body, shape

# creating 2 triangles
tri2 = create_tri(100, 400)
space.add(tri2[0], tri2[1])

# temporary obstacle setup
line_moment = pymunk.moment_for_segment(0, (0, 0), (600, -300), 10)
line_body = pymunk.Body(10, line_moment, body_type=pymunk.Body.STATIC)
line_body.position = (0, 300)

line_shape = pymunk.Segment(line_body, (0, 0), (600, -300), 10)
space.add(line_shape)

# Main loop
game_running = True
while game_running:
   ev = pygame.event.poll()
   if ev.type == pygame.QUIT:
       pygame.quit()
   screen.fill((255, 255, 255))
   draw_options = pymunk.pygame_util.DrawOptions(screen)
   space.debug_draw(draw_options)
   space.step(0.02)
   pygame.display.flip()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-30 20:16:49

问题是三角形的重心在角(0,0)。这意味着它的所有质量都在这一点上,这就是为什么它不会在侧面旋转和滑落。

修复它的一种方法是调整使(0,0)位于三角形的中间:

points = (-25, -25), (25, -25), (0, 25)

另一种方法是在创建形状时转换三角形的顶点,在每个方向上翻译它们-25:

shape = pymunk.Poly(body, points, pymunk.Transform(tx=-25,ty=-25))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58570061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档