Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 旋转接头中达到一定角度时发生火灾事件_C++_Cocos2d X_Box2d_Revolute Joints - Fatal编程技术网

C++ 旋转接头中达到一定角度时发生火灾事件

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

我需要使用box2dcocos2dx开发加农炮游戏。大炮分为两部分

  • 底座固定在地面上,不移动

    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);
    
  • 加农炮应该计算出射击的角度,并且计算正确。使用
    revolutionjointobject->setLimits(lowerAngle,higherAngle)
    这里我使用的lowerAngle和higherAngle都是所需的角度,因此手臂直接移动到所需的角度而不移动

  • 然后我需要移动手臂,而不仅仅是改变它的角度,因此我使用旧角度和所需角度设置了lowerAngle和HighAngle,这取决于哪个角度较低,哪个角度较高,并改变了旋转点的电机速度

  • 问题是,我需要一个回调方法,当旋转关节达到某个角度或当电机速度达到零时触发,假设当手臂达到极限角度时停止,电机速度为零

我在SO中搜索,找到了每一步计算角度的方法,这可以使用,但需要更多的计算,我觉得很懒


是否存在通知电机速度或已达到某个角度的回调方法?

安排一个函数来检查每个帧上的条件。当您不再需要检查时-取消选择器的计划,然后在需要时重新计划。
据我所知,您的确切任务没有回调。

在幕后回调所做的就是检查每帧的角度,然后在关节角度在一定范围内时调用回调函数


这个用例没有内置回调。您可以自行隐藏正在发生的事情,也可以将if语句放在update函数中。该方法的性能将很好。

然后我在步骤中进行了检查,这只是一个假设条件,不需要安排全新的方法调整,但不要为了过早优化而牺牲设计,否则-一切都可以。