(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個條件中的任一個,則不會執行修改邏輯代碼.這三個條件分別是:
增加前提條件的原因前面已經說過了,是因為我們不想選手速度修改的太過頻繁.各位童鞋可以根據自己的實際需求進行調整,這個限制條件并不是絕對的.
從上所述,可以知道無論如何每位選手最多也只能被修改5次速度,我覺得在這里比較合適.
下面的代碼比較簡單了,就是生成一個隨機的速度值,它是一個比率在0到2之間,如果小于1則表示減速,如果大于1表示加速,等于1表示速度不變.
最后別忘了更新totalChanged的值.
哦鳥!接下來又到了真正修改matchRun方法的時候了 ;)
總結
以上是生活随笔為你收集整理的(NO.00001)iOS游戏SpeedBoy Lite成形记(八)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 考研微机原理是计算机基础吗,2015年电
- 下一篇: 交换机中对于tagged帧和untagg