(NO.00001)iOS游戏SpeedBoy Lite成形记(四)

下面我们来实现选手从起点开始移动到终点的代码.

首先在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方法了 ;)

上一篇:数据库两个神器【索引和锁】


下一篇:iOS开发多线程编程2 - NSOperation