下面我们来实现选手从起点开始移动到终点的代码.
首先在GameScene.h接口中添加matchRun方法:
#import "CCNode.h" @interface GameScene : CCNode -(void)matchRun; @end
因为GameScene中覆盖了GameInterface交互层,里面有一个run按钮.这个按钮的功能肯定不是由GameInterface类来完成,最终需要调用GameScene中的matchRun方法.
在Xcode中新建GameInterface类,继承自CCNode.在其实现文件中加入以下代码:
#import "GameInterface.h" #import "GameScene.h" @implementation GameInterface{ GameScene *_gameScene; } -(void)didLoadFromCCB{ _gameScene = (GameScene *)self.parent; } -(void)run{ [_gameScene matchRun]; } @end
这样用户点击run后,就会执行GameScene中的matchRun方法.
接下来回到GameScene中,在完成该方法之前,我们还需要一些实例变量,所以先建立它们:
@implementation GameScene{ CCNode *_track; NSMutableArray *_players; BOOL _matching; NSInteger _finishedCount; NSTimeInterval _bestElapsedTime; }
其中_track是赛场背景的引用,我们需要将玩家加入到_track而不是GameScene中,这样新加入的大头贴不会将run按钮遮挡.(参考之前初始化玩家的代码).
_players是所有玩家的数组,前面初始化中创建的玩家需要加入其中. 对于一场比赛是否完成需要有一个变量标示,否则会打断正在进行中的比赛,_matching就是这个作用.
_finishedCount是个重要的变量,用来确定每个选手最终的名次. 最后一个变量_bestElapsedTime,顾名思义是比赛中选手的最好成绩,将来可以用来记录最好成绩榜,这个以后再说,现在先不管.
在GameScene.m中实现以下方法:
-(void)matchReset{ if (!_matching) { [self initPlayPositon]; _bestElapsedTime = 0; } }
在每次比赛新开始前调用,用来初始化选手在赛车上的位置以及其他与比赛相关的参数.
别忘了还要在GameScene的初始化方法中初始化其ivar:
-(instancetype)init{ self = [super init]; if (self) { _players = [NSMutableArray array]; } return self; }
好了,准备工作基本就绪,可以着手实现matchRun方法了 ;)