(NO.00004)iOS实现打砖块游戏(十四):3球道具的实现
2015-12-03 08:55
525 查看
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)
反弹棒变化道具实现前面已经介绍过了,我们下面可以在小球上做些文章,实现一个道具可以变出更多的小球出来.
我们称之为3球道具:当反弹棒碰到该道具时,小球变为3枚,接下来你尽可能保持这些小球不掉落,这样你可以得到比1个球时更多地分数.
打开Xcode,在Star.m中的spawnStar方法条件中加入新的分支:
因为在Star.m的方法中需要知道当前场景中小球的状态,所以先在GameScene.h接口中添加2个新的方法:
回到GameScene.m中,扩展代码增加一个新的实例变量,用来表示当前所有小球:
接着我们实现上面新加的2个方法:
注意方法中都设置了同步,因为读取时可能发生修改,如果不加同步,app可能会发生crash!
再回到Star.m中,我们添加关键的道具功能方法doThreeBalls:
代码首先检查当前场景中有多少个小球,如果多余1个则直接返回,就是说该道具只能在只有1枚小球时发挥作用.
接着创建另外2个小球,通过之前定义的addBall方法,把它们添加到场景中去.
最后在GameScene.m的碰撞处理中增加新选择分支:
现在编译连接app,运行效果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201512/538c010765f5572576ddbc3d08f67144)
在下一篇中,我们再接再厉,实现一种新的导弹星道具:可以让你更加肆无忌惮的发射导弹大开杀戒,下篇再见 ;)
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)
反弹棒变化道具实现前面已经介绍过了,我们下面可以在小球上做些文章,实现一个道具可以变出更多的小球出来.
我们称之为3球道具:当反弹棒碰到该道具时,小球变为3枚,接下来你尽可能保持这些小球不掉落,这样你可以得到比1个球时更多地分数.
打开Xcode,在Star.m中的spawnStar方法条件中加入新的分支:
case brkColorPurple: star = [Star starWithType:starTypeThreeBalls]; break;
因为在Star.m的方法中需要知道当前场景中小球的状态,所以先在GameScene.h接口中添加2个新的方法:
-(void)addBall:(CCSprite*)ball; -(NSInteger)currentBallsCount;
回到GameScene.m中,扩展代码增加一个新的实例变量,用来表示当前所有小球:
NSMutableArray *_balls;
接着我们实现上面新加的2个方法:
//在GameScene中添加小球,小球的位置必须已经被正确设置 -(void)addBall:(CCSprite*)ball{ @synchronized(self){ [_physicsWorld addChild:ball]; [_balls addObject:ball]; } } -(NSInteger)currentBallsCount{ @synchronized(self){ return _balls.count; } }
注意方法中都设置了同步,因为读取时可能发生修改,如果不加同步,app可能会发生crash!
再回到Star.m中,我们添加关键的道具功能方法doThreeBalls:
+(void)doThreeBalls:(CGPoint)ballLocation{ GameScene *gameScene = [GameScene sharedGameScene]; if ([gameScene currentBallsCount] != 1) { return; } CCSprite *ball2 = (CCSprite*)[CCBReader load:@"Elements/Ball"]; ball2.position = ballLocation; [gameScene addBall:ball2]; CCSprite *ball3 = (CCSprite*)[CCBReader load:@"Elements/Ball"]; ball3.position = ballLocation; [gameScene addBall:ball3]; }
代码首先检查当前场景中有多少个小球,如果多余1个则直接返回,就是说该道具只能在只有1枚小球时发挥作用.
接着创建另外2个小球,通过之前定义的addBall方法,把它们添加到场景中去.
最后在GameScene.m的碰撞处理中增加新选择分支:
case starTypeThreeBalls: @synchronized(self){ if ([self currentBallsCount] >= 1) { [self scheduleBlock:^(CCTimer *timer){ [Star doThreeBalls:((CCSprite*)_balls[0]).position]; } delay:0]; } } break;
现在编译连接app,运行效果如下:
在下一篇中,我们再接再厉,实现一种新的导弹星道具:可以让你更加肆无忌惮的发射导弹大开杀戒,下篇再见 ;)
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 我是运营,我没有假期
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- VB实现的《QQ美女找茬游戏》作弊器实例
- C#实现洗牌游戏实例
- C#实现的算24点游戏算法实例分析
- C#实现简单的井字游戏实例
- C++编写简单的打靶游戏
- C++实现基于控制台界面的吃豆子游戏
- 纯javascript实现的小游戏《Flappy Pig》实例