【问题标题】:Fire event when reach certain angle in revolute joint旋转关节达到一定角度时的火灾事件
【发布时间】:2014-09-25 11:51:28
【问题描述】:

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

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

    b2WeldJointDef basePlatformWeldJointDef;
    basePlatformWeldJointDef.Initialize(base->getBody(), weaponPlatform->getBody(),weaponPlatform->getBody()->GetWorldCenter());
    basePlatformWeldJointDef.collideConnected = false;
    basePlatformWeldJoint = m_world->CreateJoint(&basePlatformWeldJointDef);
    
  • ArmRevoluteJoint固定在底座上。

    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);
    
  • 大炮应该计算出射向的角度,这是正确计算的。在这里使用revolutJointObject->setLimits(lowerAngle, higherAngle) 我使用 lowerAnglehigherAngle 两者都是所需的角度,因此手臂直接移动到所需的角度而无需运动。

  • 然后我需要移动手臂而不仅仅是改变它的角度,所以我用旧角度和所需角度设置了 lowerAngle 和 highAngle,这取决于哪个更低哪个更高,并改变了电机RevoluteJoint

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

我在 SO 中搜索,发现This Solution 计算每一步的角度,可以使用,但需要更多计算,我懒得做。

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

【问题讨论】:

    标签: c++ cocos2d-x box2d revolute-joints


    【解决方案1】:

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

    【讨论】:

    • 然后我在步骤中进行检查,这只是一个 if 条件不需要安排全新的方法
    • 只是不要为了过早的优化而牺牲设计,否则——不管怎样都行。
    【解决方案2】:

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

    此用例没有内置回调。您可以自己隐藏正在发生的事情,或者您可以将 if 语句放在更新函数中。这样的表现会很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多