前一篇提到,如果要想动态修改选手的速度需要在update方法中添加代码.

因为update方法在游戏每一帧都会调用,所以我们不可能修改的太频繁.否则一来对性能有影响,而来玩家表现的极不自然,像抽风一样.

所以我决定,在一场比赛中每位选手的速度最多只能修改5次,先在GameScene中添加如下静态变量与常量:

static const NSInteger MaxChanged = 5;
static NSInteger totalChanged = 0;

要实现速度的变化在update中实现,可是怎样实现呢?
因为我们选手移动是通过CCActionMove来做的,立即可以想到,在不改变代码逻辑,最简单的方法就是用CCActionSpeed来修改Move动作的速度.所以我们要在Player类中新增实例变量,以便后来引用.

打开Player.h文件,在接口中添加一个新属性:

@property (nonatomic,weak) CCActionSpeed *speed;

这个属性不在Player的初始化中赋值,而是在实际比赛中赋值.

回到GameScene.m中,我们尝试实现一下update方法:

-(void)update:(CCTime)delta{NSInteger fork = (CCRANDOM_0_1() * 100)+1;if (_matching && fork%91 == 0 && totalChanged < MaxChanged ) {for (Player *player in _players) {NSInteger negMul = arc4random_uniform(2) == 0?1:-1;CCTime rndSpeed = (negMul * CCRANDOM_0_1())+1;player.speed.speed = rndSpeed;}totalChanged++;}
}

代码逻辑比较清晰,简单解释下:
首先判断速度修改的前提条件是否达到,如果不符合3个条件中的任一个,则不会执行修改逻辑代码.这三个条件分别是:

  1. 比赛已经开始
  2. 随机数fork可被91整除
  3. 已修改次数小于最大修改次数

增加前提条件的原因前面已经说过了,是因为我们不想选手速度修改的太过频繁.各位童鞋可以根据自己的实际需求进行调整,这个限制条件并不是绝对的.

从上所述,可以知道无论如何每位选手最多也只能被修改5次速度,我觉得在这里比较合适.

下面的代码比较简单了,就是生成一个随机的速度值,它是一个比率在0到2之间,如果小于1则表示减速,如果大于1表示加速,等于1表示速度不变.

最后别忘了更新totalChanged的值.
哦鸟!接下来又到了真正修改matchRun方法的时候了 ;)

(NO.00001)iOS游戏SpeedBoy Lite成形记(八)相关推荐

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

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

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

    下面修改最为关键的matchRun方法里的代码: CCActionCallBlock *blk = [CCActionCallBlock actionWithBlock:^{_finishedCoun ...

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

    我们回到matchRun方法中去尝试第一次修改,部分代码如下: CCActionMoveBy *moveBy = [CCActionMoveBy actionWithDuration:duration ...

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

    上篇最后遇到是神马问题呢? 原来由于现在seq动作的时间变得不确定了,jump的持续时间不能对应发生变化,导致可能选手在比赛后边就没有跳跃动作了!这虽不影响整个代码逻辑,却多少有些让玩家不爽. 一种解 ...

  5. (NO.00001)iOS游戏SpeedBoy Lite成形记(十九)

    最后就是要完成前面设定的第3件事:如果玩家赌对了则赢钱,反之输钱. 前面的框架搭的差不多了,所以这里实现起来也就不难了 ;) 首先我们怎么知道用户输入完毕,然后关闭窗口了?只有在这个点上GameSce ...

  6. 【原创】IOS游戏辅助--天天酷跑助手的实现

    标 题: [原创]IOS游戏辅助--天天酷跑助手的实现 作 者: coltor 时 间: 2014-04-16,20:20:44 链 接: http://bbs.pediy.com/showthrea ...

  7. (NO.00002)iOS游戏精灵战争雏形(一)

    原本想做一个复杂点的平面动作游戏,可以觉得还是有点把握不了.还是先从简单的原型开始吧. 构思中的精灵战争(SpriteWar)是一个类似FC时代的小游戏,可以造兵,可以捕获敌兵.原本还想加上保卫老巢的 ...

  8. AppStore编年史 iOS游戏开发者的变迁路

    http://ipad.66u.com/yxzb/20140627_29184.html 智能机游戏市场发展不过三四年,其间的形态与格局变化,却已沧海桑田.AppStore编年史带大家走进iOS游戏开 ...

  9. 计算机可以玩游戏吗教程,怎么在电脑上玩ios游戏_电脑上玩ios游戏教程_飞翔教程...

    脑上玩ios游戏教程来咯~飞翔铭月带来了电脑怎么玩苹果ios游戏的步骤.在电脑上玩安卓游戏可以通过安卓模拟器,那么玩iOS游戏该怎么操作呢?请看下文吧. 1.在越狱的苹果设备上找到Cydia,进入后在 ...

最新文章

  1. matlab rltool,基于Matlab工具箱Rltool的控制系统校正设计
  2. Android中自定义xmlns
  3. python方向键映射_python交互界面无法使用方向键
  4. Python十段经典代码
  5. 神策数据徐美玲:数字化运营,从 1 到 100 的跨越
  6. LinuxWindows下批量修改文件后缀
  7. python读取csv某些行_【Python】Python 读取csv的某行或某列数据
  8. 常用正则表达式整理【总结】
  9. 9、Flutter 实现 生成二维码
  10. 51单片机下载完程序后不亮_程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍...
  11. 山寨高仿iPad难现山寨手机的辉煌
  12. uWSGI, Gunincorn, 啥玩意儿?
  13. 爬虫-爬取中国诗歌网中中国好诗栏目 - 统计词汇出现频数 - 副本
  14. pandas缺失数据处理
  15. 从“半部电台”到“云监工” 天翼云助力红色电信启航新征程
  16. 河南二级分销系统开发|二级分销是如何分佣的?
  17. 均值定理最大值最小值公式_超急关于不等式最大值最小值的求法
  18. 【Opencv综合应用】自制训练集的人脸识别2——制作csv文件
  19. 治愈系课程教材 第三课
  20. 求求你!不要在网上乱拷贝代码了

热门文章

  1. Kullback–Leibler divergence(相对熵,KL距离,KL散度)
  2. Python(60)_闭包
  3. DOMBOM(source、methods、contents、Application)
  4. ios 常用操作-1
  5. eclipse 与 tomcat 的那些路径
  6. 【转载】在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
  7. 更新node最新版本方法和 npm install -g n 运行错误
  8. NodeJS解决跨域问题:Access-Control-Allow-Origin
  9. Node — 第七天 (大事件项目接口实现一)
  10. Linux进程管理之ps的使用