box2d 力

引用:http://www.cocoachina.com/bbs/simple/?t29782.html

在box2d中用ApplyLinearImpulse发射出一枚非圆形炮弹,所面临的问题!

简单画了2个示意图.看图后再说明


图1:




图2:





我现在实现了图2的效果。我想一般人都能从这两个示意图中看出区别,以及我想要求助的目的


如果看图后就能帮我解决问题的大大们,就请不用看我下面的具体阐述了








我可能对box2d不太熟悉的原因,还有就是对相关物理学理解的不是很透彻,所以导致了一时没有思路


图2的实现我是这么做的。


1.取玩家操作的发射力度以及角度。


2.把角度值赋给炮弹的刚体的angle属性。    bodyDef.angleCC_DEGREES_TO_RADIANS(角度值);


3.力度通过GetWorldVector转换         b2Vec2 f = bulletbody->GetWorldVector(b2Vec2(力度值, 0.0f));    


4.取刚体质心点       b2Vec2 p = bulletbody->GetWorldCenter();  


5.设置线性推力       bulletbody->ApplyLinearImpulse(f,p);


如果想实现伪图1效果 可以设置一下角速度        bulletbody->SetAngularVelocity(-1.5f);





但必定不真实,也不是正确的完成了所属意图.总体来说是错误的,我只想让发射出去的炮弹,能随”弹道“ 发生相应的角度变化(也许是质心变化?)  
看了一些例子。发现都用了圆形炮弹或持续旋转的炮弹来避免的这个问题。但我想要实现的就是像 ”百战天虫“ 或PC网络游戏 "疯狂坦克" 中的炮弹角度随曲线的变化而变化

用相关的物理术语我也形容不出来。所以就傻乎乎的画了2张图 来表达我的意思。 

+

 

问题解决了!还是用得box2d   但用了一阶导数的概念。最终绕回到box2d 用其线速度的属性,敲了3行代码 完美解决!

posted @ 2012-10-18 11:05  镇水古月  阅读(257)  评论(0编辑  收藏  举报