(NO.00004)iOS实现打砖块游戏(七):关卡类的实现
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)
关卡游戏的精髓都集中在游戏的关卡里,其中包含了游戏的所有要素,至于关卡如何管理这些要素这得根据不同游戏想要的效果来决定.我们开始先从在关卡中建立砖块,小球和反弹棒3个元素做起.
创建关卡类
在Xcode中创建Level类,继承于CCNode类.修改头文件为如下内容:
#import "CCNode.h"
@interface Level : CCNode
-(void)removeFromBricks:(id)brick;
-(CGPoint)ballPosition;
@end
Level要维护一个单独的列表,用来保存其中的砖块实例,当在Level外部删除砖块时我们需要用removeFromBricks方法来保证brick被正确删除.后一个方法看名知其意,就是取得小球的位置,这个在后面会用到.
实现关卡的初始化方法
打开Level.m文件,添加一个初始化方法:
-(void)didLoadFromCCB{
_bricks = [NSMutableArray array];
Brick *brick = [Brick brickWithColor:brkColorBlack];
_brickHeight = brick.contentSize.height;
_brickWidth = brick.contentSize.width;
_viewSize = [CCDirector sharedDirector].viewSize;
[self initBricks];
[self initStick];
}
我们首先创建了保存砖块的_bricks数组,取得在关卡中后面会频繁用到的一些变量,然后就是初始化砖块和反弹棒的方法.你可能会奇怪怎么少了初始化小球的方法?这里要说明一下,因为在初始化小球的方法中要调整小球的力矩,所以放在这里太早,这时小球的物理对象还未准备好,我们把它放到onEnter方法中去:
-(void)onEnter{
[super onEnter];
[self initBall];
}
砖块的初始化
我们先看砖块的初始化:
-(void)initBricks{
Brick *brick = [Brick brickWithColor:brkColorBlack];
for (int row = 0; row < 8; row++) {
[self updateCurrentBrickColor:1];
for (int col = 0; col < 4; col++) {
brick = [Brick brickWithColor:_currentBrickColor];
brick.position = ccp(col * (_brickWidth - BRICK_SHADOW_OFFSET_X),
MAX_BRICK_HIGHT - row * (_brickHeight - BRICK_SHADOW_OFFSET_Y));
[_physicsWorld addChild:brick];
[_bricks addObject:brick];
}
}
}
以上代码从屏幕顶部开始依次绘制8行,每行4块砖块,同时将每块砖块添加到物理世界和_bricks数组中.
反弹棒的初始化
-(void)initStick{
_stick = [Stick stickNormal];
_stick.position = ccp(_viewSize.width/2, STICK_Y);
[_physicsWorld addChild:_stick];
}
代码很简单,建立一个反弹棒然后添加到物理世界中.
小球的初始化
最后是小球的初始化工作:
//在Level中初始化小球并给其一个随机的冲力.(不希望小球直接垂直落在反弹棒上)
-(void)initBall{
_ball = (CCSprite*)[CCBReader load:@"Elements/Ball"];
NSAssert(_ball, @"ball must not nil");
_ball.name = @"ball";
_ball.position = ccp(_viewSize.width/2, BALL_Y);
[_physicsWorld addChild:_ball];
CCPhysicsBody *physBall = _ball.physicsBody;
CGPoint velocity = physBall.velocity;
NSInteger neg = arc4random_uniform(2);
if (neg == 0) {
neg = -1;
}
NSInteger rndX = arc4random_uniform(100)+100;
velocity.x = neg * rndX;
[physBall applyAngularImpulse:10];
[physBall applyImpulse:velocity];
}
在以上方法中建立了一个小球,我们不希望其垂直掉落下来,所以随机给其赋予一个冲力,让其略活泼点的掉落下来 ;)
现在编译和运行游戏,现在的游戏刚进入的效果如下所示:
一个基本的关卡框架就基本搭好了,下篇我们来实现游戏中的碰撞处理.see you ;)
(NO.00004)iOS实现打砖块游戏(七):关卡类的实现的更多相关文章
- (NO.00004)iOS实现打砖块游戏(四):砖块类的实现
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用Xcode打开之前SpriteBuilder创建的项目,我们现 ...
- (NO.00004)iOS实现打砖块游戏(六):反弹棒类
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 打砖块游戏另一个要素是反弹棒,我们在这篇类来实现反弹棒类. 创建 ...
- (NO.00004)iOS实现打砖块游戏(五):游戏场景类
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 创建游戏场景类头文件 在Xcode创建新GameScene类,继 ...
- (NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们完成了导弹道具相关的道具制作,本篇中我们来完成其实现 ...
- (NO.00004)iOS实现打砖块游戏(八):游戏中小球与砖块的碰撞
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在回到GameScene.m中,我们所有的碰撞处理就放在该类中 ...
- (NO.00004)iOS实现打砖块游戏(十五):导弹发射道具的实现(上)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇中我们实现了3球道具,但是好像还是不过瘾,如果能让反弹棒更 ...
- (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 通用的星星类已经完成了,下面我们来实现具体的变长和缩短道具. 变 ...
- (NO.00004)iOS实现打砖块游戏(十一):"一闪一闪亮晶晶,我们都是小星星"
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在一个基本的游戏逻辑已经搭建好了,但是感觉还是缺点什么呢? 蠢 ...
- (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前一篇博文介绍了物理对象中小球与砖块的碰撞处理,在这一篇中我们再 ...
随机推荐
- POJ2187Beauty Contest 旋转卡壳
题目链接 http://poj.org/problem?id=2187 先求凸包 再求凸多边形直径 旋转卡壳模板题 #include<cstdio> #include<cstring ...
- 凸包(BZOJ1069)
顶点一定在凸包上,我们枚举对角线,观察到固定一个点后,随着另一个点的增加,剩下两个点的最优位置一定是单调的,于是就得到了一个优秀的O(n^2)做法. #include <cstdio> # ...
- Android技术分享-文字转语音并朗读
Android技术分享-文字转语音并朗读 最近在做一个项目,其中有一个功能是需要将文本转换成语音并播放出来.下面我将我的做法分享一下. 非常令人开心的是,Android系统目前已经集成了TTS,提供了 ...
- win7+Apache 设置域名指向本地文件夹
实现:浏览器地址栏输入 www.bnzoo.com 访问 D:/www 系统:win7旗舰版+Apache 步骤: 1.打开文件 C:\Windows\System32\drivers\etc\hos ...
- 修改firefox的默认缩放比
我们在使用firefox时,发现页面的缩放比只能一个一个手动调整,当跳转到新的页面时默认缩放比又还原了,这个时候又要重新调整,相当不方便. 下面介绍修改默认缩放比的方法: 首先,打开firefox,然 ...
- Python中模块之copy的功能介绍
模块之copy的功能介绍 copy主要分两种: 1.浅拷贝 2.深拷贝 赋值: 在python中赋值算特殊的拷贝,其实赋值可以理解为同一个对象有两个名字,所以当其中一个发生变化,另一个也跟着会变化. ...
- tf.nn.embedding_lookup TensorFlow embedding_lookup 函数最简单实例
tf.nn.embedding_lookup TensorFlow embedding_lookup 函数最简单实例 #!/usr/bin/env python # -*- coding: utf-8 ...
- 基于GCC的openMP学习与测试
(一).openMP简述 Open Multiprocessing (OpenMP) 框架是一种功能极为强大的规范,可以帮助您利用 C.C++ 和 Fortran 应用程序中的多个核心带来的好处,是基 ...
- weblogic AND jboss 反序列化漏洞
C:\Program Files\Java\jboss-4.2.3.GA\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF serv ...
- ubuntu批量更改文件权限
重装系统之后,把文件从windows分区拷到linux分区发现所有文件的权限全是777,在终端下看到所有文件的颜色都很刺眼,文件有很多,一个一个改不现实,所以写了一段python脚本批量更改文件权限. ...