pybox2d中创建b2ChainShape循环链时顶点传入报错的问题求助
pybox2d中创建b2ChainShape循环链时顶点传入报错的问题求助
嗨,我来帮你捋捋这个问题~
你遇到的这个报错,核心原因是pybox2d的Python绑定和C++版本的接口参数逻辑不一样!
在C++里调用CreateLoop需要传入顶点数组+元素数量,但在Python中完全不需要传第二个长度参数——Python的列表本身就自带长度信息,你额外加个数字反而会让函数误解参数格式,这才触发了TypeError: Expected tuple or list of length 2, got length 3的错误。
给你修正后的代码,直接去掉第二个参数3就行:
from Box2D import b2Vec2, b2ChainShape A = b2Vec2(1, 1) # vertices to test the loop creation B = b2Vec2(2, 2) C = b2Vec2(3, 3) chain = b2ChainShape() # 只传入顶点列表,不需要额外指定长度 chain.CreateLoop([A,B,C])
至于你说CreateChain(A, 2)能工作,甚至传单个顶点也没问题,这是因为CreateChain的Python接口可能兼容了多种参数形式,但CreateLoop的接口更严格,只接受顶点列表这一个参数。
如果要创建包含大量顶点的循环链,直接把所有b2Vec2对象放进列表里传给CreateLoop就可以了,完全不用手动指定长度~
备注:内容来源于stack exchange,提问作者Schwarz Fahrer
相关产品推荐
相关产品推荐

