大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! 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,运行效果如下:

在下一篇中,我们再接再厉,实现一种新的导弹星道具:可以让你更加肆无忌惮的发射导弹大开杀戒,下篇再见 ;)

最新文章

  1. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
  2. 基于Spring+SpringMVC+Mybatis的Web系统搭建
  3. [No000086]C#foreach集合被改变,报错处理方案
  4. Html5导航插件,支持水平/垂直展示
  5. Bit-Coin收入的一分钱
  6. 2015ACM/ICPC亚洲区长春站 F hdu 5533 Almost Sorted Array
  7. bootstrap 的 datetimepicker 结束时间大于开始时间
  8. java代码整理---正则表达式
  9. jquery1.9学习笔记 之选择器(基本元素三)
  10. 03-C语言编码规范和变量
  11. ubuntu下查看-卸载软件(卸载.net core sdk的方法)
  12. 6.使用桌面版AI伴侣或手机版AI伴侣实时预览编程效果
  13. ArcGIS map preview in Power BI service
  14. 和嗲妹妹面试python,是种什么体验?
  15. Angular require(抄别的)
  16. 关于tomcat性能优化
  17. hbase 无法打开60010网页
  18. python之 序列与字典遍历
  19. 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
  20. 【OpenPose-Windows】运行OpenposeDemo.exe 如何保存图像运行结果及关节点信息

热门文章

  1. 华科机考:N阶楼梯上楼
  2. 《Java技术》第三次作业
  3. USB_ESD处理
  4. Java 反射(二)
  5. JVM体系结构-----深入理解内存结构
  6. JS的forEach和map方法的区别,还有一个$.each
  7. vscode 常见插件及配置 备忘
  8. SQL语句常见DDL/DML/DCL操作部分试题(一)
  9. MongDB PHP7
  10. Python教学相关资料