Cocos2d-android游戏引擎-介绍

一、游戏引擎概念

什么是游戏引擎

游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能easy和高速地做出游戏程式而不用由零開始。

Cocos2d家族

cocos2d是一个开源的游戏开发框架,利用它能够很easy的开发2D游戏。 包含下面成员

Cocos2d-x

Cocos2d-iphone

Cocos2d-android

本质差别:开发的语言不一样:Cocos2d-x使用c++、Cocos2d-iphone使用Object-C

共同点:api名字基本一致

我们为什么要使用cocos2d

一款开源的,跨平台,轻量级的2D游戏引擎。

性能良好

广泛的社区支持

拥护非常多成功案例。比方捕鱼达人,三国塔防等

使用MIT授权协议。能够自由使用,改动源代码,不须要像GPL一样公开源代码,能够商用

二、cocos2d架构

三、架构说明

图形引擎Cocos2D Graphic

声音引擎CocosDenshion Audio

物理引擎

Box2d

Chipmunk

脚本库Lua

四、图形引擎Cocos2D Graphic

CCDirector界面的统一管理者

Ⅰ、图像引擎说明

图形引擎说明

CCDirector(导演)

引擎的控制者,控制场景的切换,游戏引擎属性的设置

CCScene (场景)

场景类,比如游戏的闪屏,主菜单,游戏主界面等。

CCLayer(布景)

图层类,每一个图层都有自己的触发事件,该事件仅仅能对其拥有的元素有效,而图层之上的元素所包括的元素,是不受其事件管理的

CCSprite(人物)

精灵类,界面上显示的最小单元

CCNode

引擎中最重要的元素,全部能够被绘制的东西都是派生于此。它能够包括其他CCNode,能够运行定时器操作,能够运行CCAction。

CCAction(动作)

动作类,如平移、缩放、旋转等动作

Ⅱ、CCDirector

CCGLSurfaceView

引擎中SurfaceView的子类,实现了SurfaceHolder.Callback接口,但并未实现Runnable接口。

存在问题:

1、绘制界面的线程是谁?

2、该线程是怎样启动的?

CCDirector的作用

界面的绘制工作是由GLThread来完毕,而GLThread的开启是在CCDirector的attachInView方法中完毕的。

管理场景CCScene

主要方法摘要:

对象的获取:

sharedDirector()取得对象

启动画图线程

attachInView()连接SurfaceView

场景的管理

runWithScene()执行场景

replaceScene()替换场景

生命周期

resume()进入执行状态

pause()暂停

end()结束

屏幕切换

setDeviceOrientation()设置横屏竖屏

setScreenSize(480, 320)设置屏幕分辨率,高于设置的分辨率时,引擎会自己主动适配,引擎将屏幕水平方向分成480份,垂直方向分成320份,代码中使用的数值是相对于这些进行计算的

帧率设置

setDisplayFPS(true)显示fps帧率。帧率的显示须要加入fps_images.png图片到assets目录下

setAnimationInterval(1.0f / 60)设置帧率,每秒刷新60次

Ⅲ、CCScene

场景CCScene

眼下该类没有什么详细的功能,它仅仅是作为一个项目中须要展示内容的根节点存在。

Ⅳ、CCLayer

图层或布景

调用addChild(CCNode child)方法加入精灵

能够在CCLayer下加入CCLayer(类似VIewGroup)

能够在CCLayer上处理用户的TouchEvents事件。

用法:写一个Layer继承CCLayer,处理自身的onTouch事件。

注意事项:须要设置setIsTouchEnabled(true)让你的Layer能够接受到Touch事件。

Ⅴ、CCSprite(精灵)

1、原点

当前的坐标系统,规定屏幕的左下角为坐标原点。通过sprite.getPosition()获得当前载入的精灵的坐标值。

2、锚点(anchor point)

①CCSprite显示时须要设置锚点信息,默觉得(0.5f,0.5f),即将CCSprite图片的中间点作为图片在当前坐标系统中的基准点,通过sprite.getAnchorPoint()获取当前精灵的锚点信息。

②锚点的设置:setRelativeAnchorPoint(false)时锚点为(0,0) 或者调用setAnchorPoint指定相关信息,当调用setAnchorPoint时setRelativeAnchorPoint方法无效

3、主要方法摘要

①锚点

setRelativeAnchorPoint(boolean relative) 设置描点,默认值为true,当设置锚点为(0,0)时使用false

setAnchorPoint(float x, float y)设置锚点指定值,重载方法setAnchorPoint(CGPoint anchor) ,CGPoint封装了x、y信息

②坐标

setPosition(float x, float y)设置精灵的坐标信息

③镜像

setFlipX(true)在x轴上的镜像,setFlipY(true)在y轴上的镜像,目标是为了重用图片资源

④透明度

setOpacity(int)0-255之间,值越小越透明,反之越不透明

⑤加入精灵

addChild(CCNode child) Adds a child to the container with z-order as 0。根据加入顺序决定显示循序,即后加入的显示在最前端。

addChild(CCNode child, int z) Adds a child to the container with a z-order。值越大显示的优先级越高。

addChild(CCNode child, int z, int tag) Adds a child to the container with z order and tag。Tag指定精灵的id,默认值是-1。

4、CCSprite点击事件分析

①CCSprite对象是否被点击的推断根据

在前面解说的小样例中,我们了解到,推断是否用户点击了某些button的图片,是根据用户点击屏幕上的坐标来完毕的。

在cocos2d中我们也须要根据用户点击屏幕的坐标来推断究竟是哪个CCSprite对象被点击了。可是因为在cocos2d中已经将坐标系统进行调整了,所以当推断是否被点击时须要将两个坐标系进行统一。

另外,因为每一个精灵仅仅相应一个坐标值,所以当推断CCSprite对象是否被点击时,须要获取整个CCSprite对象在屏幕上覆盖的范围,这须要结合锚点信息,同一时候获取到CCSprite对象的宽度和高度。

②特别须要说明的是:处理用户的触摸事件是在CCLayer中。

5、CCSprite点击事件处理

实现步骤:

①创建类MyCCLayer继承CCLayer类,重写用户触屏事件的处理方法

@Override

public boolean ccTouchesBegan(MotionEvent event) {

return super.ccTouchesBegan(event);

}

@Override

public boolean ccTouchesEnded(MotionEvent event) {

return super.ccTouchesEnded(event);

}

@Override

public boolean ccTouchesMoved(MotionEvent event) {

return super.ccTouchesMoved(event);

}

②转换屏幕坐标到cocos2d坐标系

调用CCNode.convertTouchToNodeSpace(MotionEvent event) ,将event中封装的用户点击坐标信息转换成CGPoint对象

③推断CGPoint对象是否在CCSprite对象的范围之内

6、推断CGPoint对象是否在CCSprite对象的范围之内

①推断思想

获取到当前CCSprite对象,利用getChildByTag(int)

计算这个CCSprite对象所占领屏幕的矩形范围,CCNode.getBoundingBox()方法能够获取到CCSprite对象占用的矩形范围,这些信息封装在CGRect信息中。

推断用户的触摸点是否包括在CGRect中,利用CGRect的方法containsPoint进行推断

②特别注意:假设让CCLayer能处理用户触屏事件须要设置当前的CCLayer.setIsTouchEnabled(true);

Ⅵ、CCAction

对于一个游戏来说,动作是很重要的,好的动作能够使游戏的可玩性大大提高,在cocos2d引擎中有一个动作类,CCAction是动作类的基类,动作是定义在节点(CCNode)上的,以节点为目标,主要分为两类:瞬时动作和延时动作

1、CCIntervalAction(延时动作)

2、Cocos2d提供的基本延时类动作都提供了ActionTo和ActionBy两种(七种) :

ActionTo是指动作结束的状态,也就是动作的终点。

ActionBy是指动作运行的状态,也就是动作的运行过程。

3、经常使用的延时动作类包含:

移动动作:CCMoveBy
CCMoveTo

缩放动作:CCScaleBy
CCScaleTo

旋转动作:CCRotateBy
CCRotateTo

跳跃动作:CCJumpBy
CCJumpTo

贝赛尔曲线动作:CCBezierBy
CCBezierTo

淡入淡出动作:CCFadeBy
CCFadeIn CCFadeOut

……

Ⅶ、CCIntervalAction(基本动作)

1、位置变动

移动(move)

弹跳(jump)

贝塞尔曲线运动(Bezier)

渐快(EaseIn)

渐慢(EaseOut)

先渐快后渐慢

特效,先缓冲再加速

正弦曲线速度变化

2、定点变动

缩放(Scale)

旋转(Rotate)

颜色渐变动作(Tint)

闪烁(Blink)

播放序列帧

CCIntervalAction(组合动作)

按顺序运行动作

同一时候运行要被运行的动作

间歇动作(中间暂停指定时间)

Ⅷ、关于CCAction

1、CCAction——移动(CCMoveBy与CCMoveTo)

创建对象:利用CCMoveBy(To).action(float duration, CGPoint pos) 。

參数说明: duration持续时间,pos代表目标点

不同点:①CCMoveBy指定的CGPoint 是相对坐标即相对于当前的须要移动的精灵。 CCMoveTo指定CGPoint 是绝对坐标。② CCMoveBy将reverse()方法进行了处理,而CCMoveTo返回null值。当我们须要实现精灵的重复移动时使用CCMoveBy将非常轻松的完毕。

应用场景:如游戏过关后会有一个箭头重复提示你前进的路线。首先我们须要使用CCSequence将一组移动的效果加入到一起,实现单次往返,再利用CCRepeatForever实现重复动作。

2、CCAction——弹跳(CCJumpBy与CCJumpTo)

创建对象: CCJumpBy (To).action(float time, CGPoint pos, float height, int jumps)

參数说明: time代表持续时间, pos代表目标点, height代表回落高度,jumps代表跳动次数

差别: CCJumpBy将 reverse()方法进行了处理,能够用于实现反复动作;

应用场景:

3、CCAction——贝塞尔曲线运动(CCBezierBy)

创建对象:CCBezierBy(To).action(float t, CCBezierConfig c)

參数说明: t代表持续时间, c曲线參数, CCBezierConfig.controlPoint_1起始点、CCBezierConfig.controlPoint_2顶点、CCBezierConfig.endPosition终点

应用场景:子弹,pvz中屋顶关卡

4、CCAction——渐快(CCEaseIn)

对象创建:CCEaseIn.action(CCIntervalAction action, float rate)

參数说明: action被控制的动作, rate加速度,假设为1就匀速了

渐慢:CCEaseOut与CCEaseIn參数一致,动作相反

5、CCAction——缩放(CCScaleBy与CCScaleTo)

创建对象:CCScaleBy(To).action(float t, float s)

參数说明:t代表持续时间,s代表缩放比例

差别: CCScaleBy将 reverse()方法进行了处理,能够用于实现反复动作

应用场景:心跳

6、CCAction——旋转(CCRotateBy与CCRotateTo)

创建对象:CCRotateBy(To).action(float t, float a)

參数说明:t代表持续时间,a代表旋转角度

差别:① CCScaleBy将 reverse()方法进行了处理,能够用于实现反复动作;② CCRotateTo以最便捷的方式旋转到指定角度,如旋转角度为300时,使用CCRotateTo来实现的话会逆时针旋转60度

应用场景:进度条旋转、旗子的左右摆动等

特别注意:旋转动作是沿着锚点完毕的,所以须要结合锚点统一协调旋转动作

7、CCAction——颜色渐变动作(CCTintBy与CCTintTo)

创建对象: CCTintBy(To). action(float t, ccColor3B c)

參数说明:t:时间间隔, c:RGB三色值封装对象

差别:① CCTintBy对reverse()方法实现;② CCTintBy须要设置的RGB三色值是相对值,即相对于当前的RGB值进行变动。

应用场景

8、CCAction——闪烁(CCBlink)

对象创建:CCBlink.action(float t, int b)

參数说明:t间隔时间,b闪烁次数

9、CCAction——播放序列帧

播放序列帧

CCAnimation载入

CCAnimate

假设要停止播放,能够採用stopAction

10、CCAction——连续动作CCSequence

对象创建:CCSequence.actions(CCFiniteTimeAction action1, CCFiniteTimeAction... actions)

对象说明:用于按顺序运行一连串动作

11、CCAction——并发动作CCSpawn

对象创建:CCSpawn.actions(CCFiniteTimeAction action1, CCFiniteTimeAction... params)

參数说明:指定一连串动作同一时候触发,如在跳跃过程中运行一个翻转动作。

12、CCAction——间歇动作(CCDelayTime)

对象创建:CCDelayTime. action(float t)

參数说明:t 停止时间

13、即时动作(CCInstantAction)

瞬时动作:就是不须要时间,立即就完毕的动作。

Cocos2d提供下面瞬时动作:

放置 – Place效果类似于 node.Position = ccp(x, y)。之所以作为一个动作来实现是为了能够与其它动作形成一个连续动作。

隐藏 – Hide效果类似于 [node setVisible:NO]. 之所以作为一个劢作来实现是为了能够与其它动作形成一个连续动作。

显示 – Show效果类似于 [node setVisible:YES]. 之所以作为一个动作来实现是为了能够与其它动作形成一个连续动作。

可见切换 – ToggleVisibility

14、CCAction——显示隐藏

可见性(CCHide与CCShow )

对象创建:调用action方法就可以,无參数

15、CCAction——无限动作CCRepeatForever

无限制的运行一个延时动作,通经常使用于连续运行一连串的反复动作,这些动作多放置在CCSequence中进行定义。

Ⅸ、CocosDenshion Audio声音引擎

SoundEngine处理声音

声音类型:音乐和音效

能够从长短上来做区分,音乐一般用于游戏的背景声音,音效主要是短小的声音,如植物发射子弹,僵尸吃植物时发出的声音

声音控制,如播放、暂停、声音大小调节、静音

通过缓存音乐和音效文件来提高声音处理的效率

Ⅹ、总结

讲了这么多的cocos2d游戏引擎的API,是不是感到有些枯燥啦。好的,接下来我给大家利用这些API设计一个小Dome

欲知Dome怎样,且看下篇博文。。。

时间: 2024-11-08 20:19:26

Cocos2d-android游戏引擎-介绍的相关文章

教你如何选择Android游戏引擎

我们进行Android游戏开发时选择游戏引擎是必须的,但是该如何选择呢?哪个Android游戏引擎更加适合自己呢?本文就提供了三个游戏引擎的对比说明,阐述了它们各自的特点,为大家选择引擎提供了参照. 1.Ronkon 如果不是想帮助作者解决一大堆兼容性问题的话还是不要使用这个引擎,我在上面浪费了1天半,就只是为了把实例程序跑起来.开始还以为是我水平菜,结果一堆人没跑起来,和我一样都是黑屏.虽然它文档做得好但我还是放弃了,本来Android平台兼容性就是老大难,在来个半吊子的引擎我可没本事搞定.

为什么没有好用的Android游戏引擎?

随着Android平台的不断发展,最近Android开发人员数量呈现出上升势头,就连以往较为冷门的游戏开发领域也涌现出不少生力军.然而,全新的问题正摆在了刚開始学习的人面前,非常多他们从未遇过的问题開始浮上台面. “找了好久也没看见合适的引擎,看来Android真的不适合游戏开发”.“我试过几个游戏引擎,感觉都不是非常好,效率低.BUG不可控”,“怎么中国就没人能做个向Cocos2d那样的引擎呢?看来还得等老外做好才干跟进啊.”这并非虚妄之谈,而是一些刚刚接触Android游戏开发人员的真实意见

Android 游戏引擎汇总

1.AndEngine 简介:AndEngine 基于libGDX框架开发,使用OpenGL ES进行图形绘制.同时继承了BOX2D物理引擎,因此能实现一些较为复杂的物理效果.在Rokon停止更新以后,AndEngine 成为Android 最为流行的2D游戏引擎 优点:(1)高效:在大运算量好事情况下,使用C/C++本地代码进行开发.比如物理引擎或者音频处理. (2)AndEngine是开源项目,开发者可对源码进行修改,它的源码在github上托管. (3)拥有Particle System

Android 八款开源 Android 游戏引擎

原文地址 本文内容 Angle Rokon LGame AndEngine libgdx jPCT Alien3d Catcake 最近无意间看到一篇关于 Android 搜索引擎的文章,于是搜索了,学不学是其次,主要是要有这方面的知识--技多不压身嘛~ 下面罗列出八款常见的 Android 游戏引擎,以供参考.收费.下载量过小.不公开源码,以及鄙人不知道(-_-)的引擎不在此列. Angle Angle 是一款专为 Android 平台设计的,适合快速开发的 2D 游戏引擎,基于 OpenGL

第1部分: 游戏引擎介绍, 渲染和构造3D世界

原文作者:Jake Simpson译者: 向海Email:[email protected] ------------------------------------------------------------第1部分: 游戏引擎介绍, 渲染和构造3D世界 介绍 自Doom游戏时代以来我们已经走了很远. DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎". 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,用新的模型,场景和

[Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引擎可供使用,一边自暴自弃的抱怨Android平台游戏开发难度太高,又连个像样的游 戏引擎也没有,甚至误以为使用Java语言开发游戏是一件费力不讨好且没有出路的事情. 事实上,这种想法完全是没有必要且不符合实际的,作为能和苹果iOS分庭抗礼的Android(各种意义上),当然也会有相当数量的游戏引擎存

八款常见的Android游戏引擎

原文地址:http://bbs.csdn.net/topics/380203732 1.Angle  Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发.该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程. 最低运行环境要求不详. 项目地址:http://code.google.com/p/angle/ 2.Rokon  rokon是一款Android 2D游戏

Android游戏引擎AndEngine入门讲解

AndEngine是一款基于OpenGL ES技术的2D游戏引擎,可以运行在Android1.6及以上版本的系统中.拥有更多的游戏组件与扩展功能,在默认情况下已经可以支持中文. 虽然AndEngine作为游戏引擎在功能上较libGDX更为丰富和人性化,但相比libGDX的绘图渲染机能却逊色不少.libGDX有较为完善的OpenGLES环境适应性,而AndEngine在这方面的投入明显不足.所以你是否选择AndEngine,需要从实际出发,多做几次真机测试才好下决定,下面小编将逐步讲解AndEng

游戏引擎介绍,架构,设计及实现

本文的灵感来自于<Android应用开发揭秘>的游戏引擎的那一章. 关于Game Engine,我能想到的几个问题: 1.游戏引擎是什么? 2.Game Engine是为了解决什么问题? 3.Game Engine的架构是什么? 4.如何设计一款游戏引擎? 5.游戏引擎包含哪些模块? 下面就来探讨几个问题:  1. Game Engine是什么? 游戏产业在全球来看是一个很大的产业,一款游戏大作包含了非常多的元素.游戏涉及到剧情.人物.任务.关卡.地图.画质.美术.音乐.网络等多种元素.开发一