(NO.00003)iOS遊戲簡單的機器人投射遊戲成形記(五)
上一篇我們建立了機器人物理對象,下面我們來看看對應的邏輯代碼.
進入Xcode,建立Robot和Arm類,分別繼承於CCNode和CCSprite類.代碼全部留空,後面再實現.
我們再看一下這個機器人要如何與玩家互動.當玩家觸碰到機器人手臂並且移動時,以關節為中心旋轉手臂.因為前面在SpriteBuilder中限制了關節轉動的範圍,所以不用擔心關節旋轉到”奇怪”的角度上.
首先在Arm.m的初始化方法中開啟使用者互動:<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">self.userInteractionEnabled = YES;
在Arm類中建立執行個體變數_touchPoint:
@implementation Arm{ CGPoint _touchPoint;}
添加觸摸回調方法,首先是touchBegan:
-(void)touchBegan:(CCTouch *)touch withEvent:(CCTouchEvent *)event{ CGPoint location = [[CCDirector sharedDirector] convertTouchToGL:touch]; _touchPoint = location;}
這裡保持第一次觸摸時的位置用來和之後移動時的座標相比較,從而判斷選擇的方向.
然後是touchMoved方法:
-(void)touchMoved:(CCTouch *)touch withEvent:(CCTouchEvent *)event{ CGPoint location = [[CCDirector sharedDirector] convertTouchToGL:touch]; MoveDirection direction = armMoveDirectionDown; if (location.y > _touchPoint.y) { direction = armMoveDirectionUp; }else if(location.y < _touchPoint.y){ direction = armMoveDirectionDown; } [self moveArm:direction];}
我們簡單看看這個方法:取得觸摸移動位置,用它和之前儲存的位置相比較,只要判斷y軸的值即可:如果大於之前的y值則表示向上旋轉,否則表示向下旋轉.最後根據旋轉方向旋轉手臂.這裡旋轉方向是一個枚舉值,因為可能在其他類中也會使用,比如後面我們會看到觸摸手臂旋轉的一個大問題,需要改為觸控螢幕幕選擇手臂.我們這裡將其放在一個通用標頭檔裡,建立一個Comm.h標頭檔,內容如下:
#ifndef ShootBall_Comm_h#define ShootBall_Comm_htypedef enum { armMoveDirectionUp, armMoveDirectionDown}MoveDirection;#endif
然後在所有需要使用該枚舉定義的類中包含該標頭檔即可.
在下一篇裡,我們將會看到上面代碼中還未介紹的moveArm方法是如何?的 ;)