cocos2d-x box2d物理引擎深入研究 第一篇之鼠标关节详解(b2MouseJoint)

这篇博客深入探讨了cocos2d-x使用box2d物理引擎时的鼠标关节(b2MouseJoint),指出了在追求游戏可玩性和精确定位时,鼠标关节可能存在的问题,并建议使用动力学刚体作为替代方案。文章通过代码示例说明了如何在ccTouchBegan事件中设置鼠标关节,并在后续触摸操作中处理滑动。
摘要由CSDN通过智能技术生成
在testbed例子中,使用鼠标关节操作刚体,他尝试在刚体上驱动一个点,拖向当前的鼠标位置,在旋转方面没有任何限制.

鼠标关节定义有目标点(target point),最大力矩(maxinum force), 平率(frequency)以及阻尼率(damping ratio).目标点最初与物体的锚点重合。最大力矩阻止多个刚体相互作用时产生剧烈的发作用力.频率和阻尼率是用来创建类似于距离关节(distance joint)的弹簧和减震器效果.

很多用户为了游戏的可玩性尝试修改鼠标关节.用户希望能够实现精确的定位和及时响应。在这方面鼠标关节的工作效果并不好。所以你可以考虑用动力学刚体(kinematic body)进行代替.


鼠标关节比较简单。下面是代码:

首先在ccTouchBegan中:

	//判断鼠标是否点在了刚体上。
	CCPoint mousePt = touch->getLocation();
	b2Body *pBody = m_world->GetBodyList();
	for(; pBody != NULL; pBody = pBody->GetNext())
	{
		b2Fixture *pFixture = pBody->GetFixtureList();
		for(;pFixture != NULL;pFixture = pFixture->GetNext())
		{
			b2Vec2 mouseVec;
			mouseVec.Set(mousePt.x/PTM_RATIO, mousePt.y/PTM_RATIO);
			if(pFixture->TestPoint(mouseVec))
			{
				//创建鼠标关节.
				b2MouseJointDef md;  
				md.bodyA=m_groundBody;//一般为世界边界  
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值