下面我们来实现选手从起点开始移动到终点的代码.
首先在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方法了 ;)