下面要启用场景的触摸功能,在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个问题:如何确定玩家选择的选手.

04-22 16:34