2014-09-25 70 views
0

我需要使用box2dcocos2dx开发加农炮游戏。炮被分为两个部分当在旋转关节达到一定角度时发生火灾事件

  • 基地其被固定在地面和不移动。

    b2WeldJointDef basePlatformWeldJointDef; 
    basePlatformWeldJointDef.Initialize(base->getBody(), weaponPlatform->getBody(),weaponPlatform->getBody()->GetWorldCenter()); 
    basePlatformWeldJointDef.collideConnected = false; 
    basePlatformWeldJoint = m_world->CreateJoint(&basePlatformWeldJointDef); 
    
  • 被固定在与RevoluteJoint基。

    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); 
    
  • 大炮应该计算将会发射的角度,并且这是正确计算的。在这里我使用lowerAnglehigherAngle都是所需的角度,因此手臂直接移动到所需的角度而没有运动。

  • 然后我需要移动手臂不只是改变它的角度,所以我设置lowerAngle和higherAngle与旧的角度和所需的角度取决于哪些将是更低的和哪些将更高,并改变电机速度所述RevoluteJoint的

  • 的问题是,我需要一个回调方法,其触发时转动关节达到一定角度时,或者当电机速度达到零假设当臂到达极限角度将停止并且电机速度将为零。

我于是有了搜索,我发现This Solution其计算的每一步,这是可以使用的角度,但它需要更多的计算,我觉得怠尽。

是否存在用于通知电机速度或某个角度的回叫方法?

回答

0

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

+0

然后我让我的检查步骤它只是一个条件如果不需要全新的方法来计划 – 2014-09-25 20:34:42

+1

只是不要牺牲设计过早的优化,否则 - 无论工程。 – 2014-09-25 20:37:23

0

所有回调在幕后都会检查角度,然后在关节角度在一定范围内时调用回调函数。

这个用例没有内置的回调函数。你可以让自己隐藏正在发生的事情,或者你可以把if语句放在update函数中。这样的表现会很好。