12IOS游戏开发Cocos2d.docx

上传人:b****6 文档编号:7972966 上传时间:2023-01-27 格式:DOCX 页数:16 大小:1.30MB
下载 相关 举报
12IOS游戏开发Cocos2d.docx_第1页
第1页 / 共16页
12IOS游戏开发Cocos2d.docx_第2页
第2页 / 共16页
12IOS游戏开发Cocos2d.docx_第3页
第3页 / 共16页
12IOS游戏开发Cocos2d.docx_第4页
第4页 / 共16页
12IOS游戏开发Cocos2d.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

12IOS游戏开发Cocos2d.docx

《12IOS游戏开发Cocos2d.docx》由会员分享,可在线阅读,更多相关《12IOS游戏开发Cocos2d.docx(16页珍藏版)》请在冰豆网上搜索。

12IOS游戏开发Cocos2d.docx

12IOS游戏开发Cocos2d

Cocos2d教程

1.Cocos2d简介

cocos2d是一个开源框架,用于构建2D游戏、演示程序和其他图形界面交互应用等。

Cocos2D是iPhone开发中一个非常有用的库,它可以让你在创建自己的iPhone游戏时节省很多的时间。

它具有很多的功能,比如sprite(精灵)扶持,非常酷的图形效果,动画效果,物理库,音频引擎等等。

你完全可以免费把它用于商业开发而获得收益。

你不用担心这个开源引擎的效率和可能存在的内在限制,因为:

在AppStore上已经有超过100个游戏是基于Cocos2D-iPhone。

其中3个由此进入过TOP10的排名。

其中的StickWars更是曾排名第一。

 

2.安装cocos2d-iphone

我们可以在下载Cocos2d-iPhone的最新版,为了便亍我们在命令行工具(Terminal)中找到解压缩的路径,我们将下载下来的压缩文件解压在Documents目录下。

打开Terminal工具(Application->Utilities->Terminal),通过“ls”命令列出当前目

录,通过“cddocuments”迚入Documents,再迚入你下载的cos2d-iphone-2.0-rc0a目录下,通过以下命令安装:

(注意不要少了“./”)

./install_template.sh

正常运行绋果如下图所示:

*.sh文件是一个类似Windows平台上.bat的文件,所谓安装就是将Cocos2d-iPhone预先配置好的工程模板文件拷贝到Xcode中。

Cocos2d-iPhone库目前支持3个默认工程模板:

1)标准的Cocos2d-iPhone游戏工程。

(这是我们最常用到的)。

2)内置Box2d物理引擎支持的cocos2d-iphone游戏工程。

3)内置Chipmunk物理引擎支持的cocos2d-iphone游戏工程。

3.创建并运行HelloWorld

Coco2d源码位置

资源文件

程序源代码

1)主程序入口–main

在SupportingFiles文件夹下,打开main.m文件:

}iPhone上的应用也是以intmain(intargc,char*argv[])为统一入口的。

主程序非常简单,设置了一下基本的内存回收模式,便将程序的控制权传递给了应用代理程序对象AppController。

2)应用程序对象–AppController

类AppController对象通过实现iphoneOS系统定义的应用程序接口UIApplicationDelegate来代理当前应用程序需要处理的各种系统事件:

●放弃控制权:

applicationWillResignActive

●获得控制权:

applicationDidBecomeActive

●内存报警:

applicationDidReceiveMemoryWarning

●程序退出提示:

applicationWillTerminate

●系统时间变化:

applicationSignificantTimeChange

当然,在完成刜始处理之后,通过凼数applicationDidFinishLaunching将

程序的控制权传递给Cocos2D-iPhone类库,Cocos2D-iPhone接下来开始准备启劢游戏主画面的准备:

1.获得主窗口对象(句柄)由成员window保存。

2.创建导演对象

3.设置“导演”对象的基本属性。

4.创建GLView

5.把GLView设置给导演

6.通过导演创建View

7.将View添加到Window中

8.由导演对象启劢幵运行“场景”。

上文涉及到得一些术语我们在后文中有详细的介绍,现在知道这些对象是

Cocos2D-iPhonede程序的重要组成部件就可以了。

3)Cocos2d-iPhone的主画面对象–HellowWorldScene场景

场景对象HellowWorldScence获得控制权后通过刜始化凼数init,直接在主画面中中创建一个带有“Helloworld”内容的“文本签”(Lable)。

将该标签的位置设置到屏幕的中央。

4.场景(CCScene)

我们假设一个只有两关的游戏:

通常情况下,我们会这样设计整个游戏的流程(workflow):

开场动画,可以有几个目的:

简单介绍一下游戏操作

讲述故事背景

公司或者工作室动画LOGO

进入主菜单后可以引导用户:

开始新游戏

读取进度

设置游戏声音,文字,游戏内容设置……

高分排名通常都是列表,按分数排列。

帮助操作简介

退出

接下来,玩家可以有多种选择,无论开始新游戏还是读取进度,游戏都会进入到预设关卡。

游戏过程中,第一关胜利就进入第二关,第二关胜利则进入结尾的胜利画面(播放视频或者在背景图上显示文字),确认后进入排名画面看看本次得了多少分。

如果失败了,那就会进入失败结束的画面,确定后跳转到主菜单,重新开始。

可以看出,玩家玩游戏的过程就是在我们预设的画面之间进行跳转,根据玩家操作的结果(选择菜单项、消灭敌人或者被敌人杀死)跳转到不同的画面。

这些构成游戏流程的画面就是我们所说的场景,图中用黑色线框表示的部分。

显然,不同的场景提供不同的操作,大致可以分为以下几类场景:

展示类场景:

播放视频或简单的在图像上输出文字,来实现游戏的开场介绍、胜利/失败提示、帮助说明等。

选项类场景:

主菜单、游戏参数设置等。

游戏场景:

这是游戏的主要内容,除了这个场景之外,其他类别的场景基本都是通用框架实现的。

那么不同的场景是如何实现不同功能的呢?

每个场景都是通过不同的层的叠加和组合来实现不同的功能的。

因此,通常一个场景是由一个或多个层组成的。

5.层(CCLayer)

层是我们写游戏的重点,我们99%以上的时间是在层上实现我们的游戏内容。

如下图所示,一个简单的主菜单画面是由3个层叠加实现的:

细心的读者可能已经注意到,为了让不同的层可以组合产生统一的效果,这些层基本上都是透明或者半透明的。

(否则我们就只能看到最上面的一个层了)

层的叠加是有顺序的,如图所示,编号为1的背景层在最下层,2号在中间,3号在最上面。

cocos2d也是按照这个次序来叠加画面的,处于最上层的不透明的部分会将下面的内容覆盖。

这个次序同样用于编程模型中的事件响应机制。

即编号3的层最先接收到系统事件(手指单击屏幕事件),然后是编号2,最后是编号1的层。

在事件的传递过程中,如果有一个层处理了该事件,那么排在后面的层将不再接收到该事件。

为了方便大家进行游戏开发,cocos2d从技术实现角度提供一些公用层:

处理菜单用的菜单层,处理颜色显示的颜色层等。

每一层又可以包含各式各样的内容要素:

文本、链接、精灵、地图等等。

其中,精灵是游戏的重点。

6.精灵(CCSprite)

精灵是整个游戏开发处理的主要对象。

敌方的飞机、坦克是系统控制的精灵,玩家控制的我方飞机也是精灵,甚至随机飞过的一片云、一只鸟都是精灵。

从技术上讲,精灵就是一个可以不断变化的图片。

这些变化包括:

位移、旋转、缩放以及图片帧的切换。

所谓游戏,就是玩家操作一个或多个精灵与系统控制的精灵进行互动:

近身肉搏、远程射击、对话等等。

7.导演(CCDirector)

我们已经大概了解了一个游戏的整体架构,不同的场景由不同的层组成,每个层又包含精灵在上面运动。

玩家玩游戏的过程就是在操作层上的精灵或者菜单项,从而在不同的场景中切换。

好了,有些OO编程基础的读者已经猜到导演对象的作用了。

是的,按照面向对象的设计原则和反向依赖原则:

精灵不应该依赖层,层不应该依赖场景,场景不应该依赖整个流程。

导演对象就是整个流程的代表,他负责游戏过程中的场景切换。

导演通常只有一个,因此这个对象是单例(singleton)。

cocos2d框架已经预定义了该实例,无需额外创建,我们直接使用就可以。

导演对象接收层对象/场景对象的请求,按照预先设计好的流程来切换场景。

至此,我们可以勾勒出一个游戏的整体框架和cocos2d关键对象与之的对应关系:

需要特别说明的是:

任何时间,只有一个CCScene对象实例处于激活状态。

该对象可以作为当前游戏内容的对象的容器,对于菜单对象来说,通常属于当前场景的主层。

以上就是一个游戏的主要架构。

实际上,针对每一个游戏场景而言,不同场景(关卡)、每一个层(静态、动态)、每一个对象(敌人、我方、中立方)其实都很复杂。

●使用Scene是为了:

作为某个场景的总体容器对象,包括所有的内容对象(菜单、状态、游戏角色、NPC)都属于该对象。

层叠关系通过CocosNode的addChild的Z参数决定。

2)实现场景切换的特殊效果。

因为所有的场景切换特效都是从Scene的子类

TransitionScene派生的。

●使用Layer类,就是为了处理输入问题。

1)Touch事件处理

2)动力感知处理

●使用Sprite,展示静态图片

8.画面坐标系

首先明确一下坐标系的概念:

一般意义上的坐标系为笛卡尔坐标系(应该是初中平面几何开始讲的吧,高中立体几何扩展到3维)。

不同的图形库采用不同的坐标系。

iPhone平台提供了两种绘图库:

Quartz2D和OpenGLES。

其中Quartz是CoreGraphics绘图库的子集,OpenGLES是跨平台图形库OpenGL的嵌入设备版(EmbeddedSystem)。

返两者的坐标系的原点就不一样。

●Quartz的原点在左上角:

大都数图形窗口程序,Windows和浏览器中的坐标都采用类似的坐标系。

这是一种基于虚拟“画布”绘图模型的图形库,绘图挃令可以挄次序向“画布”上画下不同的内容,后面画的内容覆盖前面画的内容(透明除外)。

比较容易理解。

●OpenGLES的原点在左下角:

OpenGLES相对比较复杂,返实际上是一个3D的绘图库,挄照“状态机”模型设计的绘图库,返个理解起来比较复杂。

他丌是简单的让后者简单叠加在前者上面,而是记录各个绘制内容的3维位置关系,挄照系统设定的投影关系,展示所有绘

制的返些内容投影在某个特定虚拟“窗口”上的图像。

Cocos2D-iPhone是基亍OpenGLES的(针对OpneGL的学习是值得的,主流操作系统都支持该图形库,比如说Google手机的Android),所以请大家记住我们程序中的窗口坐标系是返样的:

Cocos2D-iPhone引擎的大多数可显示对象都是从CocosNode对象继承过来的,该类的理解对亍使用该图形引擎至关重要,我们从返张开始逐步开始介绍该类。

今天需要说明的是不位置有关的属性:

1)anchorPoint

为了将一个矩形图像精准的放置在屏幕某一个位置上,需要设置该矩形的位置参考点(人们通常习惯亍将该参考点是、认为是该矩形的左上角那个点)。

CocosNode的该属性就是返个参考点。

x,y轴挄照OpenGLES坐标系,数值采用相对自身宽、

高的比例。

2)Position

CocosNode对象的实际OpenGLES坐标。

如下图说明了如何利用返两个属性来设定CocosNode对象的位置:

图中红色矩形框的Position为(5,5),anchorPoint为(0.3,0.5)。

若要选择图中紫色大圆点A为anchorPoint则设置(0,0),若要设置粉红色大圆点B为anchorPoint则设置(1,1)。

显然设置(0.5,0.5)时,anchorPoint为矩形对象的几何中心C,这是Sprite和Texture类对象的默认anchorPoint值。

9.cocos2d和UIView之间跳转

从cocos2d到UIView

从UIView返回到cocos2d

10.Scene之间切换

pushScene加入场景

popScene退出当前场景

replaceScene替换当前场景

end结束当前场景

以上方法都作用在director之上

切换时添加过度动画

动画效果有:

11.CCMenu

MenuItem包含:

CCMenuItemFont、CCMenuItemImage、CCMenuItemLable

上面代码用到的为CCMenuItemFont以下为CCMenuItemImage、CCMenuItemLable的使用方法:

12.cocos2d字体

CCLabelTTF*myLabel=[CCLabelTTFlabelWithString:

@"AppleGothic"fontName:

@"AppleGothic"fontSize:

20];

myLabel.position=ccp(70,50);

[selfaddChild:

myLabel];

CCLabelTTF*myLabel2=[CCLabelTTFlabelWithString:

@"HiraKakuProN-W6"fontName:

@"HiraKakuProN-W6"fontSize:

20];

myLabel2.position=ccp(100,100);

[selfaddChild:

myLabel2];

CCLabelTTF*myLabel3=[CCLabelTTFlabelWithString:

@"HiraKakuProN-W3"fontName:

@"HiraKakuProN-W3"fontSize:

20];

myLabel3.position=ccp(100,150);

[selfaddChild:

myLabel3];

CCLabelTTF*myLabel4=[CCLabelTTFlabelWithString:

@"MarkerFelt-Thin"fontName:

@"MarkerFelt-Thin"fontSize:

20];

myLabel4.position=ccp(100,200);

[selfaddChild:

myLabel4];

CCLabelTTF*myLabel5=[CCLabelTTFlabelWithString:

@"STHeitiK-Medium"fontName:

@"STHeitiK-Medium"fontSize:

20];

myLabel5.position=ccp(100,250);

[selfaddChild:

myLabel5];

CCLabelTTF*myLabel6=[CCLabelTTFlabelWithString:

@"STHeitiK-Light"fontName:

@"STHeitiK-Light"fontSize:

20];

myLabel6.position=ccp(100,300);

[selfaddChild:

myLabel6];

CCLabelTTF*myLabel7=[CCLabelTTFlabelWithString:

@"TimesNewRomanPSMT"fontName:

@"TimesNewRomanPSMT"fontSize:

20];

myLabel7.position=ccp(250,50);

[selfaddChild:

myLabel7];

CCLabelTTF*myLabel8=[CCLabelTTFlabelWithString:

@"Helvetica-Oblique"fontName:

@"Helvetica-Oblique"fontSize:

20];

myLabel8.position=ccp(350,100);

[selfaddChild:

myLabel8];

CCLabelTTF*myLabel9=[CCLabelTTFlabelWithString:

@"Helvetica-BoldOblique"fontName:

@"Helvetica-BoldOblique"fontSize:

20];

myLabel9.position=ccp(350,150);

[selfaddChild:

myLabel9];

CCLabelTTF*myLabel10=[CCLabelTTFlabelWithString:

@"Helvetica"fontName:

@"Helvetica"fontSize:

20];

myLabel10.position=ccp(250,200);

[selfaddChild:

myLabel10];

CCLabelTTF*myLabel11=[CCLabelTTFlabelWithString:

@"Helvetica-Bold"fontName:

@"Helvetica-Bold"fontSize:

20];

myLabel11.position=ccp(300,250);

[selfaddChild:

myLabel11];

13.CCSprite精灵的加载:

1)加载精灵并为精灵设置图片

2)加载指定图片中的某一部分为精灵的皮肤

3)使用CCSpriteBatchNode节省内存开销

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1