转换为世界坐标时出现Odd Box2D错误

2024-09-28 01:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我用pygame编写了一个函数来绘制我的Box2D盒子,但是在我将盒子的顶点向量乘以物体的变换的步骤中,程序崩溃了。你知道吗

函数如下:

def draw(self):
    pointlist = []
    for vertex in self.fixture.shape.vertices:
        vertex = vec2(vertex[0], vertex[1])
        print vertex, self.body.transform
        vertex * self.body.transform
        pointlist.append(world_to_screen(
            vertex[0],
            vertex[1]
            ))
    pygame.draw.polygon(SCREEN, RED, pointlist)

我收到的错误是:

b2Vec2(-0.4,-0.4) b2Transform(
    R=b2Mat22(
            angle=0.0,
            col1=b2Vec2(1,0),
            col2=b2Vec2(-0,1),
            inverse=b2Mat22(
                        angle=-0.0,
                        col1=b2Vec2(1,-0),
                        col2=b2Vec2(0,1),
                        inverse=b2Mat22((...) )
    angle=0.0,
    position=b2Vec2(6,5.99722),
    )
Traceback (most recent call last):
...
line 63, in draw
    vertex * self.body.transform
TypeError: in method 'b2Vec2___mul__', argument 2 of type 'float32'
[Finished in 2.4s with exit code 1]

我不明白。我正在传递self.body.transform.__mul__()看似有效的参数、变换和向量,但它给出了一个奇怪的错误,我不明白。你知道吗


Tags: 函数inself错误transformbody向量pygame
1条回答
网友
1楼 · 发布于 2024-09-28 01:27:50

你试着把一个顶点和一个矩阵相乘。不支持,请尝试另一种方法:

transform * vertex

另外,您不必要地复制,但不分配应用的转换的结果。你知道吗

这应该起作用:

def draw(self):
    pointlist = []
    for vertex in self.fixture.shape.vertices:
       transformed_vertex = vertex * self.body.transform
       pointlist.append(world_to_screen(
          transformed_vertex[0],
          transformed_vertex[1]
          ))
    pygame.draw.polygon(SCREEN, RED, pointlist)

我还建议你把你的世界变成一个顶点,这样整个事情就简单了

def draw(self):
    t = self.body.transform
    pointlist = [w2s(t * v) for v in self.fixture.shape.vertices]
    pygame.draw.polygon(SCREEN, RED, pointlist)

相关问题 更多 >

    热门问题