(NO.00004)iOS实现打砖块游戏(十四):3球道具的实现

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! 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,运行效果如下:

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

时间: 2024-08-19 21:06:02

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

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们完成了导弹道具相关的道具制作,本篇中我们来完成其实现代码 首先我们在Star.m的spawnStar方法中添加如下代码: case brkColorPoolBlue: star = [Star starWithType:starTypeStickShoot]; break; 接着打开GameScene.m文件,在星星和反弹棒的碰撞处理方法中添加如下处

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 到目前为止游戏基本可玩,但是砖块数量是不变的,等玩家打光所有的砖块就会觉得没啥意思了,所以我们必须想办法添加更多的砖块进来. 创建循环保持颜色的实例变量 我们想要按行添加砖块,为了美观,每行砖块的颜色应该都是不同的.所以我们先来建立一个保持当前砖块颜色的实例变量: NSInteger _currentBrickColor; 当然还有一个更新其值的方法: -(vo

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 通用的星星类已经完成了,下面我们来实现具体的变长和缩短道具. 变长的反弹棒 我们想实现如下功能:在掉落变长星之后,如果反弹棒接到它,则使反弹棒的长度变为原先的2倍. 看似很简单,但实际有一个问题.你不能仅仅延长反弹棒精灵纹理的长度,因为你在这个游戏中使用的是物理引擎,反弹棒的物理对象的大小是不可以在游戏运行中随意变化的. 所以我们需要想办法延长反弹棒的物理大小,

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇中我们实现了3球道具,但是好像还是不过瘾,如果能让反弹棒更具"攻击性"就好了,那么本篇中我们就让它发射导弹直接击毁砖块吧! 导弹道具的功能 我们要实现如下功能: 反弹棒接触到导弹道具星后"长出"一根炮管 该炮管定时向前方发射导弹 导弹碰到砖块则将其击毁,否则飞出屏幕自动销毁 一定时间后炮管消失,导弹发射也随之停止 让棒棒上长出

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 本系列来实现一个儿时就很喜欢的打砖块游戏,我记得以前红白机上有一款,画面类似如下: 玩起来的效果和下面类似: 在本篇教程中将利用物理引擎来实现整个游戏,全部素材都由本猫打造,自然不能期望过高. 打砖块游戏3要素:砖块,球和反弹棒.我们来依次制作它们. 制作砖块 首先是砖块,打开Ai,画一个简单的矩形,并设置好阴影效果.砖块的尺寸这里就得想好,我使用的是80x30

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用Xcode打开之前SpriteBuilder创建的项目,我们现在是时候写点代码了 ;) 创建Brick类头文件 新建一个Brick类,继承自CCSprite,打开Brick.h文件添加初始化类方法: +(instancetype)brickWithColor:(BrickColor)color; 因为我们要产生各种颜色的砖块所以有必要写一个枚举来区分,新建一个

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 打砖块游戏另一个要素是反弹棒,我们在这篇类来实现反弹棒类. 创建反弹棒类头文件 在Xcode中新建Stick类,在头文件中添加如下内容: #import "CCSprite.h" @interface Stick : CCSprite +(instancetype)stickNormal; -(void)moveStickTo:(CGPoint)loc

(NO.00004)iOS实现打砖块游戏(八):游戏中小球与砖块的碰撞

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在回到GameScene.m中,我们所有的碰撞处理就放在该类中.我们首先要搞清楚什么会和什么碰撞.就目前来说,我们先来实现2中碰撞:小球和砖块的碰撞,以及小球和反弹棒的碰撞. 小球和砖块的碰撞:碰撞开始 我们知道一般物理引擎对于碰撞的处理不是一蹴而就的,它分为多个阶段.在Chipmunk中将碰撞按照时间的前后分为开始和后续两个部分;不是在所有的碰撞处理中都要关

(NO.00004)iOS实现打砖块游戏(十一):"一闪一闪亮晶晶,我们都是小星星"

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在一个基本的游戏逻辑已经搭建好了,但是感觉还是缺点什么呢? 蠢蠢的这样一直打下去你有意思吗? 怎能让无聊这样的发生!在本篇博文中,就让我们来添加2个道具:变长和变短星星.但是在创建各种不同功能的道具之前,我们必须先创建出星星来. 创建星星精灵 道具是以星星显示的,这样只要简单的改变星星的颜色就可以区分不同道具了.其实对于每个不同道具应该用更符合其功能的图片来表