(NO.00003)iOS遊戲簡單的機器人投射遊戲成形記(六)
為什麼要將手臂移動的代碼單獨放在一個方法中?
其實這裡是多次重構之後的版本.原來的行動程式碼是放在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,我們發現當觸摸手臂不放且移動時,手臂會緩緩像移動方向旋轉.這裡有一個加速和減速的效果,手臂從靜止時移動起來較費勁,當轉起來的時候因為有了動能,所以越轉越快.這也是和實際物理物體的運動相符的.
通過不停旋轉手臂,發現一個小問題,是什麼呢?下一篇再揭曉 ;)