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行代码 完美解决!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值