(NO.00003)iOS遊戲簡單的機器人投射遊戲成形記(六) – iPhone手機開發 iPhone軟體開發教學課程

為什麼要將手臂移動的代碼單獨放在一個方法中?

其實這裡是多次重構之後的版本.原來的移動代碼是放在touchMoved方法裡的.後來發現除瞭觸摸手臂移動方式外,還要實現觸摸屏幕移動手臂這第二種方式.
所以將其提取出來放在一個方法中,後面還會在Arm類的接口中做聲明.現在我們暫且不管,單單看這個方法:

-(void)moveArm:(MoveDirection)direction{
    CCPhysicsBody *physicsBody = self.physicsBody;
    CGPoint velocity;

    switch (direction) {
        case armMoveDirectionUp:
            velocity = ccp(0, 10);
            break;
        case armMoveDirectionDown:
            velocity = ccp(0, -10);
            break;
        default:
            break;
    }
    [physicsBody applyForce:velocity atLocalPoint:ccp(20, 5)];
}

代碼比較清晰:首先取得Arm的物理對象,然後根據轉動方向的不同設置對應的力矩;向上旋轉則給力矩y軸一個正量,反之給y軸一個負量.我這裡設置的值為+/-10,這個沒什麼好說的,是多次試驗得出的最佳值.最後將該力矩應用在手臂上.

註意這裡我沒有用以往的applyForce:方法,而是用瞭類似的另一個方法,算是重載方法吧.該方法多瞭一個參數,用來設置該力矩具體作用於手臂上哪一個點.如果不這樣做,默認會將力矩作用於手臂的平均點上(具體哪裡本貓也不清楚;),會導致很難旋轉手臂.

註意該參數為ccp(20,5),該手臂大約長20,高10,這個正好位於手臂的中線與手的焦點上.後面發射子彈也是以這個點為參考點,後面會詳述.另外如果要重構的話,如果根據手臂長寬動態計算這個點可能更好點.

編譯運行該App,我們發現當觸摸手臂不放且移動時,手臂會緩緩像移動方向旋轉.這裡有一個加速和減速的效果,手臂從靜止時移動起來較費勁,當轉起來的時候因為有瞭動能,所以越轉越快.這也是和實際物理物體的運動相符的.

通過不停旋轉手臂,發現一個小問題,是什麼呢?下一篇再揭曉 😉

 

發佈留言