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

如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! 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];
}

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

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

(NO.00004)iOS实现打砖块游戏(十一):"一闪一闪亮晶晶,我们都是小星星"的更多相关文章

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

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

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

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

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

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

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

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

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

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 反弹棒变化道具实现前面已经介绍过了,我们下面可以在小球上做些文章 ...

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

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 准备缩短反弹棒素材 和上一篇类似,我们如法炮制一张缩短后反弹棒的 ...

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

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

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

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

  9. (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前一篇博文介绍了物理对象中小球与砖块的碰撞处理,在这一篇中我们再 ...

随机推荐

  1. [bzoj1901]动态区间k大

    定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1) ...

  2. BZOJ4079 [Wf2014]Pachinko

    完整题面: 设f(i,j)表示路径经过(i,j)这个点的概率,列出方程消元. 但暴力消元的复杂度是$O((nm)^3)$,注意每一次消元只会影响前后m个方程,所以我们可以对于第i行,只存[i-m,i+ ...

  3. Xamarin开发缺少的android_m2repository_rxx.zip下载地址以及MD5

    android_m2repository_rxx.zip下载地址以及MD5, 注意:下载后需要改文件名,改为 MD5的值.zip  例如:android_m2repository_r29.zip 需改 ...

  4. Zend引擎探索 之 PHP中前置递增不返回左值

    首先来讲,一般我们对"左值"的理解就是可以出现在赋值运算符的左侧的标识符,也就是可以被赋值.这样讲也许并不十分确切,在不同的语言中对左值的定义也不尽相同.在这里我们讨论前置递增(和 ...

  5. Linux学习之CentOS(四)----Linux文件属性、所有者、群组、其他组及文件权限操作简要总结

    Linux文件属性.所有者.群组.其他组及文件权限操作简要总结 首先介绍一个重要的知识点:文件属性控制权限 [root@www ~]# ls -al total 156 drwxr-x--- 4 ro ...

  6. MySQL 内连接与外连接

    1.内连接 MySQL中,join,cross join,inner join 是等价的. 2.外连接 2.1 左外连接 left join 2.2 右外连接  right join 3.连接条件 使 ...

  7. struts2 可以用ognl拿到值而不可以用el拿到值的解决方法

    错误debug后 得到了There is no read method for container的错误 于是我new了一个实体类 package com.unity; public class St ...

  8. JMQ

    [京东技术]京东的MQ经历了JQ->AMQ->JMQ的发展,其中JQ的基于关系数据库,严格意义上讲称不上消息中间件,JMQ的存储是JFS和HBase,AMQ即ActiveMQ,本文说说JM ...

  9. 在移动端画出真正的1px边框

    一.问题    写H5的样式时候,设置元素的边框为1px,不幸的事情在IOS设备上发生了,设计师会说,咦,边框怎么那么大,这是2px了吧?改成1px.我明明设置成1px了啊. 二.为什么边框变粗了? ...

  10. 初识Redis系列之三:Redis支持的数据类型及使用

    支持的数据类型有五种: string(字符串).hash(哈希).list(列表).set(集合)及zset(sorted set:有序集合): 下面分别对这几种类型进行简单的Redis存取操作 1: ...