C++ 旋转接头中达到一定角度时发生火灾事件
我需要使用box2d和cocos2dx开发加农炮游戏。大炮分为两部分C++ 旋转接头中达到一定角度时发生火灾事件,c++,cocos2d-x,box2d,revolute-joints,C++,Cocos2d X,Box2d,Revolute Joints,我需要使用box2d和cocos2dx开发加农炮游戏。大炮分为两部分 底座固定在地面上,不移动 b2WeldJointDef basePlatformWeldJointDef; basePlatformWeldJointDef.Initialize(base->getBody(), weaponPlatform->getBody(),weaponPlatform->getBody()->GetWorldCenter()); basePlatformWeldJointDe
- 底座固定在地面上,不移动
b2WeldJointDef basePlatformWeldJointDef; basePlatformWeldJointDef.Initialize(base->getBody(), weaponPlatform->getBody(),weaponPlatform->getBody()->GetWorldCenter()); basePlatformWeldJointDef.collideConnected = false; basePlatformWeldJoint = m_world->CreateJoint(&basePlatformWeldJointDef);
- 手臂固定在底座上,带有旋转关节
b2RevoluteJointDef armJointDef; armJointDef.Initialize(base->getBody(), arm->getBody(), m_loader->pointsToMeters(ccp(armPosition.x-(arm->getContentSize().width*WeaponScale/4),armPosition.y))); armJointDef.enableMotor = true; armJointDef.enableLimit = true; armJointDef.motorSpeed = 0; armJointDef.lowerAngle = CC_DEGREES_TO_RADIANS(0); armJointDef.upperAngle = CC_DEGREES_TO_RADIANS(0); armJointDef.maxMotorTorque = 2; armJointDef.collideConnected = false; cannonRevoluteJoint = (b2RevoluteJoint*)m_world->CreateJoint(&armJointDef);
- 加农炮应该计算出射击的角度,并且计算正确。使用
这里我使用的lowerAngle和higherAngle都是所需的角度,因此手臂直接移动到所需的角度而不移动revolutionjointobject->setLimits(lowerAngle,higherAngle)
- 然后我需要移动手臂,而不仅仅是改变它的角度,因此我使用旧角度和所需角度设置了lowerAngle和HighAngle,这取决于哪个角度较低,哪个角度较高,并改变了旋转点的电机速度
- 问题是,我需要一个回调方法,当旋转关节达到某个角度或当电机速度达到零时触发,假设当手臂达到极限角度时停止,电机速度为零
是否存在通知电机速度或已达到某个角度的回调方法?安排一个函数来检查每个帧上的条件。当您不再需要检查时-取消选择器的计划,然后在需要时重新计划。
据我所知,您的确切任务没有回调。在幕后回调所做的就是检查每帧的角度,然后在关节角度在一定范围内时调用回调函数
这个用例没有内置回调。您可以自行隐藏正在发生的事情,也可以将if语句放在update函数中。该方法的性能将很好。然后我在步骤中进行了检查,这只是一个假设条件,不需要安排全新的方法调整,但不要为了过早优化而牺牲设计,否则-一切都可以。