2014-09-25 68 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函數中。這樣的表現會很好。