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

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

(NO.00001)iOS游戏SpeedBoy Lite成形记(四)的更多相关文章

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

    这是本猫第一个原创iOS游戏,留此为证!看编号貌似要写9万多个,千锤百炼还是太少吧!? ;) 这是一个赛跑游戏,几位选手从起点跑到终点看谁用的时间最少.现在需要实现的功能是: 1.8位选手从起点移动至 ...

  2. (NO.00001)iOS游戏SpeedBoy Lite成形记(三十):增加排行榜功能3

    在这个例子中,我们的显示代码只需要选手的名字以及对应的成绩.根据选手名字取对应的成绩可以用前面实现的playerRecord:方法,我们只需要将按照成绩排序后的选手名字返回就可以了. 我只需要再实现一 ...

  3. (NO.00001)iOS游戏SpeedBoy Lite成形记(十一)

    之前的10篇内容主要实现了选手从起点移动至终点的动作,比较随机的模拟了选手的速度变化,另外完成了选手到达终点时该做的事情. 接下来的几篇中我们进一步完善SpeedBoy Lite项目,使它真正成为一个 ...

  4. (NO.00001)iOS游戏SpeedBoy Lite成形记(十三)

    游戏特效部分就先这样了,因为毕竟是Lite版本,而且是第一个App,所以咱们把主要精力放在游戏可玩逻辑上吧(虽然已经厚颜无耻的加了不少特效了). 说句题外话:游戏美工是独立开发者不可逾越的鸿沟,是无法 ...

  5. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十八):增加排行榜功能

    游戏大体上基本也就完成了,还差一个排行榜.否则如何激励各位选手创造新纪录呢? 排行榜功能也没什么难的,不过需要一点点排序的算法上的考虑. 这里我们把排行榜记录数据和排序都放在GameState类中,在 ...

  6. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十七)

    切换回Xcode,在GameScene.m中添加新的实例变量:_winLayer. 接下来在第一个选手到达终点时,我们可以完成选手胜利的动画特效了. 首先,在GameScene.m中添加一个新方法pl ...

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

    我们回到Xcode,打开GameScene.m,首先要添加实例变量: CCNode *_trackLine; 为了根据选中的赛道更新_trackLine的位置,我们添加一个显示方法: -(void)s ...

  8. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十三)

    现在还有一个视觉上的问题:玩家每次在游戏开始前选择某一赛道时,无法直观的看到所选的是哪条赛道.只能通过界面上方的gambleLabel中的文字非直观的看到.我们现在来完善它! 为了能让玩家清楚地看到, ...

  9. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十二)

    自己的游戏自己更需要多玩,这样才能首先发现不足的地方.所以本猫到现在已经忍一个地方很久了,就是弹出moneyLayer后每次都要输入数字才能关闭,这多少让人不爽.于是本篇我们就修正这个小小的不便. 首 ...

随机推荐

  1. 使用python scipy.optimize linprog和lingo线性规划求解最大值,最小值(运筹学学习笔记)

    1.线性规划模型: 2.使用python scipy.optimize linprog求解模型最优解: 在这里我们用到scipy中的linprog进行求解,linprog的用法见https://doc ...

  2. Python3 条件控制

    if 语句 Python中if语句的一般形式如下所示: if condition_1: statement_block_1 elif condition_2: statement_block_2 el ...

  3. JS基础速成(二)-BOM(浏览器对象模型)

    .t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.BOM(浏览器对象模型) 1.screen对象. console.lo ...

  4. mysql5.7在centos上安装的完整教程以及相关的“坑”

    安装前的准备 Step1: 如果你系统已经有mysql,如一般centos自带mysql5.1系列,那么你需要删除它,先检查一下系统是否自带mysql yum list installed | gre ...

  5. Dynamics CRM2016 Web Api之分页查询

    在dynamics crm web api还没出现前,我们是通过fetchxml来实现的,当然这种方式依旧可行,那既然web api来了我们就拥抱新的方式. web api中我们通过指定查询的条数来实 ...

  6. Latex:TexStudio的使用

    http://blog.csdn.net/pipisorry/article/details/54565608 Texsdudio 快捷键 The keyboard shortcuts can be ...

  7. Singular value decomposition

    SVD is a factorization of a real or complex matrix. It has many useful applications in signal proces ...

  8. 20160216.CCPP体系详解(0026天)

    程序片段(01):01.MemCpy.c 内容概要:内存拷贝 #include <stdio.h> #include <stdlib.h> #include <memor ...

  9. Unity插件 - MeshEditor(八)模型镜像特效

    将静态模型(带MeshFilter)按指定轴向.指定距离克隆一个镜像物体出来,思路很简单,将模型的顶点坐标按指定轴取反,并累加上设定的距离值,然后就完毕了!不过,因为镜像体的顶点镜像于之前模型的顶点, ...

  10. 使用Xpath定位元素(和元素定位相关的Xpath语法)

    本文主要讲述Xpath语法中,和元素定位相关的语法 第一种方法:通过绝对路径做定位(相信大家不会使用这种方式) By.xpath("html/body/div/form/input" ...