宁波建设网站制作/vi设计公司
下面要启用场景的触摸功能,在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个问题:如何确定玩家选择的选手.