下面要启用场景的触摸功能,在GameScene.m的didLoadFromCCB方法里添加下面一行:
self.userInteractionEnabled = YES;
然后还需要给GameScene添加一个实例变量,用来存放玩家选择选手的编号:
NSInteger _betPlayer;
下面添加触摸回调方法.因为这里只需要处理用户按下去的动作,所以很简单,不用管用户移动手指和触摸完成和取消的方法啦.
-(void)touchBegan:(CCTouch *)touch withEvent:(CCTouchEvent *)event{
//CGPoint location = [touch locationInView:touch.view];
//CGPoint pos = [[CCDirector sharedDirector] convertToGL:location];
//以上2行代码用下面一行就可以搞定了,功能是相同的.
CGPoint location = [[CCDirector sharedDirector] convertTouchToGL:touch];
CCLOG(@"%@",NSStringFromCGPoint(location));
for (int i = 0; i < PlayerCount; i++) {
NSValue *value = _trackRects[i];
CGRect rect = value.CGRectValue;
BOOL inThisTrack = CGRectContainsPoint(rect, location);
if (inThisTrack) {
CCLOG(@"in track %d",PlayerCount - i);
_betPlayer = PlayerCount - i;
break;
}
}
NSAssert(_betPlayer!=0, @"_betPlayer must not 0");
}
方法中用了一个for循环来一次判定用户屏幕点击位置是否在某条赛道中.前面说了Cocos2D中有现成的函数CGRectContainsPoint帮你搞定,所以不用费劲自己写啦.另外前面还说过初始化赛道Rect时和实际赛道是反的,所以这里用PlayerCount - i来修正,举个例子,如果选择的_trackRects[i]中的i是0,则8-0=8,所以玩家选中的是第8个选手.
这样我们就解决了第1个问题:如何确定玩家选择的选手.