请教一个在quick里边使用chipmunk的问题以及一个mass初始化较小时,setMass不管多大刚体都会疯狂打转问题

一般来说 会在 游戏的逻辑层中为 每个对象 做一个封装。
比如 在coinflip 里边,Coin对象就继承自 一个 sprite。
那 如果我使用了 chipmunk,游戏中的一种元素是一个刚体,同时又是一个sprite,怎么来设计这个 元素比较好呢?
是 集成一个 Body 还是 sprite,或者是 单独一个类,然后 将 body和sprite都作为这个类的 一个元素。

另外, 我目前是 继承Body的方式来做的。
但 发现 setMass setFriction setElasticity 这几个方法似乎没有生效,代码如图所示:

后边 打印出来 看上去 mass 是赋值了,其余两个赋值似乎也没有成功。打印结果 见下图:

但在 游戏中, setMass完全没有效果,也就是说 在游戏中 仍然是 mass=1的效果。

【根据mass初始化时,createXXXBody函数中会计算moment值,并设置到Inertia属性中。因此,后边光是修改mass是不行的,需要手动计算并修改Inertia属性的值】

可能是这个问题:

多边形少了一个点。最后一个点和第一个点应该相同,这样才是闭合多边形。

感谢廖大的回答,但自己做了个小测试,最后一个点不能和第一个点相同的哈· 我再看看是啥回事儿·
· 我用的是chipmunk,quick-x自带的那套封装~

必须要道个歉哈·~ 是我自己没有理解对~~我 照着之前网上的一个教程 弄的这段demo代码。
Friction 、Mass、 Elasticity 的设置都是生效了的, 只不过我日志输出时 使用了 %d 来输出,所以Friction不管怎么变,四舍五入后都为1,输出的格式应为 %f 。

不过还有另一个问题, 当我初始化MASS 为1 时,无论后边setMass多大,都会有一定概率出现 刚体碰撞后 疯狂打转的现象,这也是我误认为 setMass 无效的原因。
若 初始化mass 为100,则不会出现这样的问题。

疯狂打转这个问题,应该是 friction 相对于 mass 来说太小了。所以碰撞发生后,因为摩擦力太小,造成了很大的角速度(不知道该用什么名次,大概就是让物体旋转的力)。

刚才跟了一下源码看,发现 *CCPhysicsWorld::createPolygonBody 这个函数在调用的时候会 根据mass、还有 vertexes、vertexes长度、offsetX,
计算惯性值moment,然后 cpNewBody的时候 会设置设个 moment。
但是我setMass的时候 只是修改了一下 mass的值,没有去修改这个moment值。 会不会是这个原因造成的 刚体疯狂打转?

本来想自己改了验证一下的, 貌似改了之后需要重新编译player,qt没搞过·~正在捣鼓中~

~ 疯狂打转 现在确认了, 是 需要手动设置 Inertia 的问题。
不过 说实话,对于我这样的自学新手,这样的封装确实容易搞不懂哈。得把源码跟进去了才知道的说~。
还有,由于 cpMomentForXXX 函数没有导出luabinding ,所以要计算 inertia的值 还有些麻烦勒