(NO.00004)iOS实现打砖块游戏(十四):3球道具的实现
2024-08-31 11:06:44
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! 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,运行效果如下:
在下一篇中,我们再接再厉,实现一种新的导弹星道具:可以让你更加肆无忌惮的发射导弹大开杀戒,下篇再见 ;)
最新文章
- Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
- 基于Spring+SpringMVC+Mybatis的Web系统搭建
- [No000086]C#foreach集合被改变,报错处理方案
- Html5导航插件,支持水平/垂直展示
- Bit-Coin收入的一分钱
- 2015ACM/ICPC亚洲区长春站 F hdu 5533 Almost Sorted Array
- bootstrap 的 datetimepicker 结束时间大于开始时间
- java代码整理---正则表达式
- jquery1.9学习笔记 之选择器(基本元素三)
- 03-C语言编码规范和变量
- ubuntu下查看-卸载软件(卸载.net core sdk的方法)
- 6.使用桌面版AI伴侣或手机版AI伴侣实时预览编程效果
- ArcGIS map preview in Power BI service
- 和嗲妹妹面试python,是种什么体验?
- Angular require(抄别的)
- 关于tomcat性能优化
- hbase 无法打开60010网页
- python之 序列与字典遍历
- Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To sta
- 【OpenPose-Windows】运行OpenposeDemo.exe 如何保存图像运行结果及关节点信息