(NO.00004)iOS实现打砖块游戏(十一):"一闪一闪亮晶晶,我们都是小星星"
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! 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实现打砖块游戏(十一):"一闪一闪亮晶晶,我们都是小星星"的更多相关文章
- (NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们完成了导弹道具相关的道具制作,本篇中我们来完成其实现 ...
- (NO.00004)iOS实现打砖块游戏(六):反弹棒类
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 打砖块游戏另一个要素是反弹棒,我们在这篇类来实现反弹棒类. 创建 ...
- (NO.00004)iOS实现打砖块游戏(一):素材的制作
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 本系列来实现一个儿时就很喜欢的打砖块游戏,我记得以前红白机上有一 ...
- (NO.00004)iOS实现打砖块游戏(十五):导弹发射道具的实现(上)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇中我们实现了3球道具,但是好像还是不过瘾,如果能让反弹棒更 ...
- (NO.00004)iOS实现打砖块游戏(十四):3球道具的实现
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 反弹棒变化道具实现前面已经介绍过了,我们下面可以在小球上做些文章 ...
- (NO.00004)iOS实现打砖块游戏(十三):伸缩自如,我是如意金箍棒(下)!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 准备缩短反弹棒素材 和上一篇类似,我们如法炮制一张缩短后反弹棒的 ...
- (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 通用的星星类已经完成了,下面我们来实现具体的变长和缩短道具. 变 ...
- (NO.00004)iOS实现打砖块游戏(十):砖块!更多的砖块!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 到目前为止游戏基本可玩,但是砖块数量是不变的,等玩家打光所有的砖 ...
- (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前一篇博文介绍了物理对象中小球与砖块的碰撞处理,在这一篇中我们再 ...
随机推荐
- BZOJ1095(动态点分治+堆)
终于把这个坑填了.. 按重心分治建树,每个点存两个堆,第一个存的是这个点子树中的点到父重心的距离,第二个存的是子节点第一个堆的堆顶,同时有一个全局答案堆,存的是每个点第二个堆的最大值+次大值. 20亿 ...
- java(MyEclipse)创建webservice和测试webservice
转载地址:http://blog.csdn.net/hsfy2012/article/details/46300921 创建并发布自己的Webservice的工具 1 安装MyEclipse 2 ...
- python中str常用操作
1. 字符串的操作 字符串的连接操作 符号: + 格式:str1 + str2 例如:str1 = 'I Love' str2 = 'You!' print(str1 + str2) >> ...
- new File()
首先 File 类是对文件系统的映射 并不是硬盘上真实的文件所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会在硬盘中创建文件 如果需要创 ...
- static class 静态类(Java)
一般情况下是不可以用static修饰类的.如果一定要用static修饰类的话,通常static修饰的是匿名内部类. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static ...
- 561. Array Partition I
Given an array of 2n integers, your task is to group these integers into n pairs of integer, say \(( ...
- centos 6安装 H3C iNode 上网客户端
我的安装目录是/usr/iNode 直接把客户端安装包拷到这个文件夹下然后解压: #rar x iNode2.-R0162.rar 然后进入文件夹,里边有一个install.sh文件,这是一个安装文件 ...
- Docker仓库
仓库是集中存放镜像文件的场所.有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分.实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(t ...
- AbstractQueuedSynchronizer源码解读
1. 背景 AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)是Doug Lea大师创作的用来构建锁或者其他同步组件(信号量.事件等) ...
- Spring动态切换多数据源解决方案
Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...