IOS cocos2d学习笔记-<一>cocos2d-Box2d的环境搭建

(本文写作基于千锋3g学院提供的第三季讲授视频编写,更多资料和资源下载地址请看笔记扉页:传送门


万丈高楼从地起,我们做一个游戏,当然需要一个搭建好的环境了。

我们需要做的事情就是创建项目,添加框架,API,以及工程所需文件。


我的开发环境:

xcode 4.6.1

cocos2d - OC

OpenGL ES 1.0

box2d - 2.1.1

(后面三个所需API在提供的教学源代码里面都有提供,copy然后“add to file”就可以了)


看着视频来写创建一个全空的工程:

(1)起一个牛逼轰轰的工程名字:

鉴于这个工程叫做AngryBirds,抱着尝试的心态去怒试一把。好,就叫AngryTry了。


(2)ARC错误

注意不要使用ARC技术,因为所提供的cocos2d API文档是没有使用ARC技术的,使用之后编译会报上一堆错误

(如果喜欢使用ARC,也可以,在项目的Targets设置下找到 Build Phases -->Compile Sources下不使用ARC技术的所有cocos2d文件,在Compiler Flags 项中写入“-fno-objc-arc”[不含双引号]错误就可以解决了)


(3)加入框架

总共要加入6个框架:

AVFoundation.framework

AudioToolbox.framwork

OpenAL.framework

OpenGLES.framework

QuartCore.framework

libz.dylib

这些框架各有什么用大家应该都清楚,都加进取就是了,没什么特别的问题。


(4)修改AppDelegate.mm

把所涉及到使用Box2d.h文件的所有实现文件都应该改成.mm结尾,.mm文件可以混合使用OC/C/C++语言,Box2d是纯c++语言写的,所以把你的所有实现文件都改成.mm结尾吧。不要小看这个地方,本人亲身经理,因为你的一个小文档没有改成.mm结尾,一堆摸不着头脑的错误因运而生,其中一个典型的错误就是:   #includ<cassert> file not found 错误。一个基本库的文件找不到,你要上哪去找错误...?会汗死人的。


(5)加入资料文档

这里有三个文档需要加入Images、Level还有一个像包心菜一样不知道有多少层的libs文档。把这三个文件拷到项目目录下然后很自然地add进项目里面

跟着欧阳老师笑嘻嘻地去项目设置Build Setting-->Search Path里,把Always Search User Paths 前两个改成Yes, User Header Search Path 第二个改成${PROJECT_DIR}/libs

好设置完了,欧阳老师说运行看一下有没有问题,我们笑嘻嘻地跟着点击运行,如果你是像我一样使用xcode4.6,也许你会发现欧阳老师的画面里“Build Succeeded” 并且弹出黑屏幕的苹果机后淡定地说一句“没有问题”,自己却看着那堆诸如 “#include<Box2d/Box2d.h> file not found” 红彤彤的错误在抓头皮了。

这个问题我纠结了好几天,想方设法地去寻找答案,可是一点进展都没有,难道笨鸟学飞就死在树枝上?

于是我愤然安装了cocos2d v2.x的工程模板,创建cocos2d IOS with Box2d项目

这个cocos2d模板使用了box2d物理引擎做了一个简单的点击出现盒子的demo运行起来完全没有问题。

我怒找Build Setting->Search Path->User Header Search Path,此时,我两眼泪哗哗,写的并不同于视频中的那样,里面填的是:

  “项目名/libs”

带着激动的心情,打开荒废了几天的AngrtTry怒试了一把,弹出了几个警告之后“Build Succeeded”----"没有问题!"

我不太清楚什么回事,使用千锋的源代码使用#{PROJECT_DIR}/libs是没有问题的,用“AngryBirds/libs”就会报错...欢迎大牛拍砖长知识...

终于这个问题是解决了。

不过什么办法,只要遇到#include<Box2d/Box2d.h> file not found 的错误都是User Header Search Path 设置不对。大家注意了,血的教训。


(6)写入基本代码

1 - 导演出马

(在cocos2d中的导演Director使用单例模式,只要有包头文件“cocos2d.h”,哪里都可以用[CCDirector sharedDirector]获得导演,编辑、设置游戏进程)

-设置导演类型:setDirectorType:kCCDirectorTypeDisplayLink(性能最好)

-设置横屏幕:setDevicOrientation: CCDevicOrientationLandscapeLeft

-设置游戏刷新率:setAnimationInterval: 1.0f/60.0f

-显示刷新率:setDisplayFPS: YES

-设置剧场画面:setOpenGLView:(EAGLView *)glView   (这个设置是确定所有剧场上演的地方,glView(EAGLView)就是一个舞台,所有CCSence就run在这个舞台上)

2-创建RootviewController文件,谨记改.m成.mm,把主视图交给主窗口并做一个重要的事情

-设置视图为舞台视图:setView:glView(上文提到的舞台)

[这一步非必要,可以直接把glView 交给 AppDelegate 的window 运行]


3-写app的生命周期

director = [CCDirector shareDirector];

-app将要收到后台:[director pause];

-app进入后台:[dircetor stopAnimation];

-app将要进入前台:[director startAnimation];

-app继续运行:[director resume];

-app将要终结:[[director openGLView] removeFromSuperview];         //把导演进行中的GLVIEW remove掉

       [self.window release];

       [director end];

-app系统时间发生改变时:[director setNextDeltaTimeZero:YES];        //设置下次增量时间为零

这里提供两个帖子,分别介绍app的生命周期所调用的方法以及导演类方法的总结,好文章好文章:

生命周期:http://www.cnblogs.com/landylee/archive/2012/05/30/2526640.html

导演类方法:http://blog.163.com/shiyanchunyee@126/blog/static/12667909820131533855885/



4-创建新的剧场

创建自己的一个剧场需要做的是初始化,写出初始化剧场的格式后,我们就可以在里面添加自己想要的东西了

基本格式如下:

-编写类方法:

+(id)scene

       {

CCScene *sc = [CCScene node];

// 创建空的剧场

LoadingScene *ls = [LoadingScene node];     

// 这个是自己的节目,sc是ls的容器

[sc addChild: ls];

return sc;

}

-重写构建函数:

- (id) init

{

self = [super init];

if (self)

{

// 添加你想要的东西

}

return self;

}

5-最后创建你的剧场

最后一步,在AppDelegate中只需使用 [ director runWithScene: [LoadingScene scene] ] ;  你的场景就可以运行起来了。




Simple,Right?

下一篇更精彩!



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值