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

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

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

(NO.00004)iOS实现打砖块游戏(十四):3球道具的实现的更多相关文章

  1. (NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们完成了导弹道具相关的道具制作,本篇中我们来完成其实现 ...

  2. (NO.00004)iOS实现打砖块游戏(十五):导弹发射道具的实现(上)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇中我们实现了3球道具,但是好像还是不过瘾,如果能让反弹棒更 ...

  3. (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 通用的星星类已经完成了,下面我们来实现具体的变长和缩短道具. 变 ...

  4. (NO.00004)iOS实现打砖块游戏(十):砖块!更多的砖块!

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 到目前为止游戏基本可玩,但是砖块数量是不变的,等玩家打光所有的砖 ...

  5. (NO.00004)iOS实现打砖块游戏(一):素材的制作

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 本系列来实现一个儿时就很喜欢的打砖块游戏,我记得以前红白机上有一 ...

  6. (NO.00004)iOS实现打砖块游戏(四):砖块类的实现

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用Xcode打开之前SpriteBuilder创建的项目,我们现 ...

  7. (NO.00004)iOS实现打砖块游戏(六):反弹棒类

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 打砖块游戏另一个要素是反弹棒,我们在这篇类来实现反弹棒类. 创建 ...

  8. iOS工作笔记(十四)

    1.scrollview的frame指的是其可视范围,contentSize指的是其滚动范围,分别是在水平方向和竖直方向上的 所以要让scrollview在水平方向不能滚动,那么需要如下设置 _scr ...

  9. IOS基础之(十四) KVO/KVC

    资料参考: http://www.cnblogs.com/kenshincui/p/3871178.html http://www.cnblogs.com/stoic/archive/2012/07/ ...

随机推荐

  1. 后缀自动机模板(SPOJ1811)

    用后缀自动机实现求两个串的最长公共子串. #include <cstdio> #include <algorithm> ; char s[N]; ]; int main() { ...

  2. 安装ipython,使用scrapy shell来验证xpath选择的结果 | How to install iPython and how does it work with Scrapy Shell

    1. scrapy shell 是scrapy包的一个很好的交互性工具,目前我使用它主要用于验证xpath选择的结果.安装好了scrapy之后,就能够直接在cmd上操作scrapy shell了. 具 ...

  3. 关于InnoDB的读写锁类型以及加锁方式

    (本文为了方便,英文关键词都都采用小写方式,相关知识点会简单介绍,争取做到可以独立阅读) 文章开始我会先介绍本文需要的知识点如下: innodb的聚簇索引(聚集索引)和非聚簇索引(二级索引.非聚集索引 ...

  4. Windows 下 Ionic 开发环境搭建

    Ionic 介绍 首先,Ionic 是什么. Ionic 是一款基于 Cordova 及 Angular 开发 Hybrid/Web APP 的前端框架,类似的其他框架有:Intel XDK等. 简单 ...

  5. 将一个div置于另一个div之上

    div piao置于div bg之上 <div class="bg"> <div class="piao" style="backg ...

  6. 阿里架构师带你深入浅出jvm

    本文跟大家聊聊JVM的内部结构,从组件中的多线程处理,JVM系统线程,局部变量数组等方面进行解析 JVM JVM = 类加载器(classloader) + 执行引擎(execution engine ...

  7. JAVA 第二天 内部类

    package com.company; /** * Created by Administrator on 2016/8/23. */ public class Outter {//生成的字节码文件 ...

  8. VUE相关资料合集

    ===官方=== https://github.com/vuejs/vue vue-components组件库 ---PC端--- https://github.com/ElemeFE/element ...

  9. 1. 两数之和 LeetCode

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [, , , ], target = 因为 n ...

  10. JavaScript for 循环

    循环可以将代码块执行指定的次数. JavaScript 循环 如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的. 我们可以这样输出数组的值: 一般写法: documen ...