(本文写作基于千锋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?
下一篇更精彩!