(NO.00001)iOS游戏SpeedBoy Lite成形记(八)
前一篇提到,如果要想动态修改选手的速度需要在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个条件中的任一个,则不会执行修改逻辑代码.这三个条件分别是:
- 比赛已经开始
- 随机数fork可被91整除
- 已修改次数小于最大修改次数
增加前提条件的原因前面已经说过了,是因为我们不想选手速度修改的太过频繁.各位童鞋可以根据自己的实际需求进行调整,这个限制条件并不是绝对的.
从上所述,可以知道无论如何每位选手最多也只能被修改5次速度,我觉得在这里比较合适.
下面的代码比较简单了,就是生成一个随机的速度值,它是一个比率在0到2之间,如果小于1则表示减速,如果大于1表示加速,等于1表示速度不变.
最后别忘了更新totalChanged的值.
哦鸟!接下来又到了真正修改matchRun方法的时候了 ;)
(NO.00001)iOS游戏SpeedBoy Lite成形记(八)的更多相关文章
- (NO.00001)iOS游戏SpeedBoy Lite成形记(一)
这是本猫第一个原创iOS游戏,留此为证!看编号貌似要写9万多个,千锤百炼还是太少吧!? ;) 这是一个赛跑游戏,几位选手从起点跑到终点看谁用的时间最少.现在需要实现的功能是: 1.8位选手从起点移动至 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(三十):增加排行榜功能3
在这个例子中,我们的显示代码只需要选手的名字以及对应的成绩.根据选手名字取对应的成绩可以用前面实现的playerRecord:方法,我们只需要将按照成绩排序后的选手名字返回就可以了. 我只需要再实现一 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十一)
之前的10篇内容主要实现了选手从起点移动至终点的动作,比较随机的模拟了选手的速度变化,另外完成了选手到达终点时该做的事情. 接下来的几篇中我们进一步完善SpeedBoy Lite项目,使它真正成为一个 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十三)
游戏特效部分就先这样了,因为毕竟是Lite版本,而且是第一个App,所以咱们把主要精力放在游戏可玩逻辑上吧(虽然已经厚颜无耻的加了不少特效了). 说句题外话:游戏美工是独立开发者不可逾越的鸿沟,是无法 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二十八):增加排行榜功能
游戏大体上基本也就完成了,还差一个排行榜.否则如何激励各位选手创造新纪录呢? 排行榜功能也没什么难的,不过需要一点点排序的算法上的考虑. 这里我们把排行榜记录数据和排序都放在GameState类中,在 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二十七)
切换回Xcode,在GameScene.m中添加新的实例变量:_winLayer. 接下来在第一个选手到达终点时,我们可以完成选手胜利的动画特效了. 首先,在GameScene.m中添加一个新方法pl ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二十四)
我们回到Xcode,打开GameScene.m,首先要添加实例变量: CCNode *_trackLine; 为了根据选中的赛道更新_trackLine的位置,我们添加一个显示方法: -(void)s ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二十三)
现在还有一个视觉上的问题:玩家每次在游戏开始前选择某一赛道时,无法直观的看到所选的是哪条赛道.只能通过界面上方的gambleLabel中的文字非直观的看到.我们现在来完善它! 为了能让玩家清楚地看到, ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二十二)
自己的游戏自己更需要多玩,这样才能首先发现不足的地方.所以本猫到现在已经忍一个地方很久了,就是弹出moneyLayer后每次都要输入数字才能关闭,这多少让人不爽.于是本篇我们就修正这个小小的不便. 首 ...
随机推荐
- Rabbitmq集群
分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 Rabbitmq集群高 ...
- 苹果OS系统安装Xcode方法
打开Xcode系统,在app store 里面找到自己系统对应的可升级的Xcode版本进行下载,下载到本地后,设置存放Xcode存放的文件夹为共享文件夹. 在MAC OS共享文件夹里面找到Xcode安 ...
- Spark Streaming应用启动过程分析
本文为SparkStreaming源码剖析的第三篇,主要分析SparkStreaming启动过程. 在调用StreamingContext.start方法后,进入JobScheduler.start方 ...
- Java中获取文件大小的正确方法
本文出处:http://blog.csdn.net/djy1992/article/details/51146837,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始 ...
- Swift基础之音乐播放随机变换着色板
今天的内容比较简单,我也就不做详细的文字介绍了,直接上代码,希望对大家有所帮助 var audioPlayer = AVAudioPlayer() //梯度配色 let gradientL ...
- 剑指Offer——常用SQL语句、存储过程和函数
剑指Offer--常用SQL语句.存储过程和函数 常用SQL语句 1.在MySQL数据库建立多对多的数据表关系 2.授权.取消授权 grant.revoke grant select, insert, ...
- Eric5 for Python 3.3.3安装指南
一言蔽之,搭配是关键.以32位Window为例,先后安装: 1.PyQt PyQt4-4.10.3-gpl-Py3.3-Qt4.8.5-x32.exe http://www.riverbankcomp ...
- mysql 远程连接配置
近期买了阿里云服务器,服务器 安装了mysql,需要远程操作mysql数据库,但是远程不配置的话,连接不上去的.需要配置 .具体的配置如下: 先看看my.cnf是否绑定了本机,如果绑定了地址就解绑吧. ...
- Request和Response的格式
Request和Response的格式 Request格式: HTTP请求行 (请求)头 空行 可选的消息体 注:请求行和标题必须以<CR><LF> 作为结尾(也就是,回 ...
- Cocos2D中节点Z序的计算规则
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...