您当前的位置: 首页 >  游戏

(NO.00004)iOS实现打砖块游戏(十一):

发布时间:2015-11-30 09:16:26 ,浏览量:0

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)

现在一个基本的游戏逻辑已经搭建好了,但是感觉还是缺点什么呢?

蠢蠢的这样一直打下去你有意思吗?

怎能让无聊这样的发生!在本篇博文中,就让我们来添加2个道具:变长和变短星星.但是在创建各种不同功能的道具之前,我们必须先创建出星星来.

创建星星精灵

道具是以星星显示的,这样只要简单的改变星星的颜色就可以区分不同道具了.其实对于每个不同道具应该用更符合其功能的图片来表示.但在这里,我们从简了.

那么变长星就是是反弹棒变长的道具,变短星就是缩短反弹棒的道具.这样我们就实现了用附加的道具调整游戏难度,以增加一些趣味性.

首先打开SpriteBuilder,新建一个Star.ccb文件,类型为CCSprite.将制作好的五角星图片拖入精灵中,然后开启物理对象,并按五角星的边勾画物理边界:

这里写图片描述

注意现在星星是白色,我们将在代码中修改星星的颜色.

创建星星类

回到Xcode,新建一个Star类,继承于CCSprite.修改Star.h文件为如下内容:

#import "CCSprite.h" #import "Comm.h" @class Stick; @class Brick; @interface Star : CCSprite @property (nonatomic,assign) StarType starType;

+(instancetype)starWithType:(StarType)type;
+(void)spawnStar:(Brick*)brick;

为了以后支持不同种类的道具星,我们需要在Comm.h里添加表示种类的枚举:

typedef enum {
    starTypeUnknown,
    starTypeStickLonger,
    starTypeStickShorter,
    starTypeThreeBalls,
    starTypeStickShoot,
    starTypeMax
}StarType;

That’s it!我们一共准备创造4种不同道具,分别是变长星,变短星,3球星以及导弹星.

打开Star.m文件,完成接口中方法的实现:

+(instancetype)starWithType:(StarType)type{
    CCColor *color; switch (type) { case starTypeStickLonger:
            color = [CCColor redColor]; break; case starTypeStickShorter:
            color = [CCColor blackColor]; break; case starTypeThreeBalls:
            color = [CCColor whiteColor]; break; case starTypeStickShoot:
            color = [CCColor orangeColor]; break; case starTypeUnknown: case starTypeMax: default:
            NSAssert(NO, @"starType invalid"); break;
    }

    Star *star = (Star*)[CCBReader load:@"Elements/Star"];
    star.color = color;
    star.starType = type; return star;
}

代码很简单,我们按照type创建对应的道具星.接下来是如何在屏幕上显示它们:

//根据砖块产生对应的star +(void)spawnStar:(Brick*)brick{
    Star *star; switch (brick.brickColor) { case brkColorYellow:
            star = [Star starWithType:starTypeStickLonger]; //return; break; case brkColorRed:
            star = [Star starWithType:starTypeStickShorter]; //return; break; case brkColorPurple:
            star = [Star starWithType:starTypeThreeBalls]; break; case brkColorPoolBlue:
            star = [Star starWithType:starTypeStickShoot]; break; case brkColorMax: case brkColorUnknown:
            NSAssert(NO, @"error brick color!"); break; //默认情况不产生star,直接返回 default: return; break;
    }

    star.position = brick.position; //将产生的star加入物理世界中 [brick.parent addChild:star];

    CCPhysicsBody *physStar = star.physicsBody; NSInteger neg = arc4random_uniform(2); NSInteger rndX = arc4random_uniform(5); NSInteger rndY = arc4random_uniform(5); if (neg == 0) {
        neg = -1;
    } CGPoint velocity = ccp(rndX*neg, rndY);
    [star scheduleBlock:^(CCTimer *timer){
        [physStar applyAngularImpulse:19];
        [physStar applyImpulse:velocity];
    } delay:0];
}

星星不是无缘无故蹦出来的,只有在消灭某些砖块的时候才会掉落道具星,以上代码就是完成该功能.首先按照不同砖块产出对应的星星,然后将其加入到物理世界中,同时给其一个随机的冲力,让它掉落的更自然些.

星星类基本完成了,下面我们就来实际实现变长和缩短的道具星吧 ;)

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109273博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0579s