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

如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! 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. Linux 下查看tomcat版本

    1.echo $JAVA_HOME 2.进入jdk路径 3.java -version

  2. JS中怎样判断undefined(比较不错的方法)

    最近做项目碰到的问题.拿出来跟大家分享一下吧. 用servlet赋值给html页面文本框值后,用alert来弹出这个值.结果显示"undefined".所以我就自然的用这个值和字符 ...

  3. 解决scroll在ios上卡顿问题和兼容ios不支持:active伪类情况

    //有时候因为滚动层级元素过多会产生卡顿,特别在ios上十分明显,如果不想更换其他实现方式,可以加:-webkit-overflow-scrolling: touch; 开启硬件加速: 兼容ios不支 ...

  4. 使用CSS让多出来的字变为省略号

    <style> .text1 { width:200px; overflow:hidden; text-overflow:ellipsis; -o-text-overflow:ellips ...

  5. 110个oracle常用函数总结

    . ASCII 返回与指定的字符对应的十进制数; SQL) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- ---- ...

  6. 论文笔记--PCN:Real-Time Rotation-Invariant Face Detection with Progressive Calibration Networks

    关键词:rotation-invariant face detection, rotation-in-plane, coarse-to-fine 核心概括:该篇文章为中科院计算所智能信息处理重点实验室 ...

  7. A quike guide teaching you how to use matlab to read netCDF file and plot a figure

    1.       Preparation 2.       A brief introduce to netCDF. 4 3.       Data Structure. 4 3.1   Attrib ...

  8. python笔记一(语言简介、解释器、输入输出)

    一.python语言简介 一顿狂吹python目前有多火.多NB,哈哈哈,不过用起来心情确实很舒畅. 解释性语言:缺点,运行速度慢. 二.python解释器 与C.C++.java不同,以上都需要先将 ...

  9. JS判断PC还是移动端打开网页

    最近在做移动端网站,也需兼容PC端.还没找到更好的方法,只能用javascr判断用户是在PC端打开还是移动端打开. JS判断 var isPC = function (){    var userAg ...

  10. C++框架_之Qt的窗口部件系统的详解-上

    C++框架_之Qt的窗口部件系统的详解-上 第一部分概述 第一次建立helloworld程序时,曾看到Qt Creator提供的默认基类只有QMainWindow.QWidget和QDialog三种. ...