位置: 编程技术 - 正文

cocos2d基础介绍(cocos2dx4.0教程)

编辑:rootadmin

推荐整理分享cocos2d基础介绍(cocos2dx4.0教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2d教程,cocos2dx4.0教程,cocos2d怎么样,cocos2dx官方教程,cocos2dx入门,cocos2djs,cocos2dx入门,cocos2d教程,内容如对您有帮助,希望把文章链接给更多的朋友!

cocos2d中,大量使用了单例(singleton)模式,单例其实就是一个普通的类,但是它在整个应用程序生命周期内只实例化一次,cocos2d中,要访问单例对象,基本上都是使用shared开头的方法(目前为止,我没有发现过有不这样使用的单例)。如果你还没看懂单例是什么,那么看看下面这个例子你就知道了。

cocos2d的整体结构类图:

  我觉得单例应该是包含了一些公用的方法,而且调用这些方法,不会去修改单例的属性,否则其他的类来调用单例的时候,所遇到的结果就是未知的了。说完单例,我们先来说说一个重要的单例类——CCDirector。CCDiretor类是Cococs2d游戏引擎的核心,它存储了cocos2d种大量的全局配置信息,而且管理着所有的cocos2d场景。Dirctor的主要作用有一下几点:

切换场景存储cocos2d的配置信息访问试图(包含OpenGL、UIView、UIWindow)暂停、恢复以及终止游戏在UIKit和OpenGL之间转换坐标CCNode类

接下来,说说CCNode类。cocos2d中,所有的节点都继承自CNode类,它是一个没有具体显示的抽象类,仅用于定义所有的公共属性和方法。首先我们来看一下cocos文档里面列举出来的类的继承关系,可以从中发现CCScene、CCSprite都继承自CCNode,以前CCLayer也应该是继承自CCNode,但是在1.0.1的文档中查不到这个类,先记录下,等下再去查。

 再来看看这个类的部分公共函数,里面包含了各种对节点的操作,增加、删除、获取节点、调度(即隔多少秒执行一次,稍后会详细说、取消调度、开始播放动作、停止动作等):

(void)

- addChild:

(void)

- addChild:z:

(void)

- addChild:z:tag:

(void)

- removeFromParentAndCleanup:

(void)

- removeChild:cleanup:

(void)

- removeChildByTag:cleanup:

(void)

- removeAllChildrenWithCleanup:

(CCNode *)

- getChildByTag:

(void)

- reorderChild:z:

(void)

- cleanup

(void)

- draw

(void)

- visit

(void)

- transform

(void)

- transformAncestors

(CGRect)

- boundingBox

(CGRect)

- boundingBoxInPixels

(CCAction *)

- runAction:

(void)

- stopAllActions

(void)

- stopAction:

(void)

- stopActionByTag:

(CCAction *)

- getActionByTag:

(NSUInteger)

- numberOfRunningActions

(void)

- scheduleUpdate

(void)

- scheduleUpdateWithPriority:

(void)

- schedule:

(void)

- schedule:interval:

(void)

- unschedule:

(void)

- unscheduleAllSelectors

(void)

- resumeSchedulerAndActions

cocos2d基础介绍(cocos2dx4.0教程)

(void)

- pauseSchedulerAndActions

CCScene类

一个CCScene对象往往是场景图种的第一个节点。通常来说,CCScene节点的第一层子节点一定是CCLayer的子类,而CCScene对象本身,通常是利用CCLayer对象种的静态方法&#;(id)scene来创建,而且游戏中的各个对象,也通常是由这些子节点(CCLayer)来保存,而不是CCScene本身来保存,这样做的好处,会在CCLayer部分介绍。

1、场景类跟app建立关系上

我们可以把要显示的第一个场景,加在AppDelegate中applicationDidFinishLaunching方法的最后,类&#;如下:

[[CCDirector sharedDirector] runWithScene:[HelloWorld scene]];

HelloWold类是一个继承自CCLayer的类,scene是其中的一个静态方法,用来将layer加入scene里面,如下所示:

2、内存使用

当进行场景替换的时候,cocos2d会把自己占用的内存清理干净,它会删除所有的节点,停止所有的动作,并且对所有用选择器选中的方法取消调度。但是,由于在进行场景替换时,新场景往往在旧场景释放之前就被加载到内存了,这会导致内存负荷瞬间加大,这个问题在使用场景转换动画的时候,显得&#;外明显。这时候,场景首先会被创建,然后过渡效果运行,一直要到过度效果运行完毕之后,旧场景才会从内存中释放。

  由于场景替换的时候,会停止所有的动作,那么可否在播放场景过渡动画前先把前一个场景截屏,然后释放掉前一个场景再播放动画,这样的话,就能节省不少内存。

3、场景的推进和弹出

cocos2d种有pushScene和popScene这两个有用的方法,这两个方法用来在不释放旧场景内存的情况下运行新场景,可以加快场景替换的速度。由于很多场景可以互相叠加的存在于内存之中,很容易就会忘记弹出一个场景,或者对于同一个场景弹出太多遍。学过堆栈的同学,应该知道这种情况的危险性。但是这个用来切换setting还是不错的选择,因为setting一般都不怎么占内存,当然,特殊情况除外。

一个CCScene可以包含多个CCLayer:CCTransitonScene

场景过渡动画有时候能为游戏添色不少。在cocos2d中,要使用过度动画还是比较简单的,只要在场景转换时添加两行代码就行了。比如下面这个淡入淡出效果:

CCTransitonScene定义了很多的场景转换动画,看下下面这张类图应该能很清楚的知道:

CCLayer

开始在CCScene里面提到过,CCLayer本质是对节点进行分组,游戏中的各个对象,一般是用CCLayer来保存的。这样的好处是,可以很轻松的修改层的属性或者在该层上运行一个动作来影响层上的所有子节点。例如你可以对某一层施加一个动作,然后这个动作会对该层上的所有对象产生影响。当然,不使用层也能达到这样的效果,只要对每个对象分别进行操作即可,但是显然,不使用层的做法是非常低效的。

CCLayer能够接收触摸事件和加速剂事件,但是接收触摸或者加速计事件的开销是很大的,这也就导致有人说使用多个层会影响性能。实际上你可以使用任意多个蹭,与其他的节点相比,他们对于性能并没有太大的影响。如果太多的层需要接收和处理触摸或者加速计事件,可以只用一个蹭来接收和处理这些输入,然后在必要的情况下,通过这个层将输入事件通知给其他节点或者类。

1、接收触摸事件

使用self.isTouchEnabled = YES来显示启动接收触摸事件,一般会在init方法中开启此功能。下面列出几个常用单点触控的触摸事件:

a)当手指接触到屏幕时被调用:

 b)当手指离开屏幕时候被调用:

c)当触摸时间被取消时调用:

d)当手指在屏幕上移动的时候被调用:

在使用单点触摸之前,要向层中添加以下方法来启用有针对性的触摸处理:

CCTouchBegan返回一个bool&#;,如果返回YES,就意味着不想让这个触摸被传送到其他优先级更低的有针对性的触摸处理,也就相当于你直接吞噬掉了这个触摸事件。

由于触摸事件是由Cocoa Touch API接收的,因此一定要吧触摸位置转换成cocos2d所用的OpenGL坐标:

2、接收加速计事件

同样,需要self.isAccelerometerEnabled = YES来显示启动加速计来接收加速计事件,但是这个事件的处理比触摸时间就简单多了,只需要向层里面添加一个特定方法来接收加速计事件:

CCSprite

CCSprite是cocos2d种最为常用的类,它用一副图像将精灵显示到屏幕上。要创建一个精灵很简单,比如你的工程的Resources分组下有一张叫做monster.png的图,那么只需要使用如下方法,就能将精灵显示在层上:

通过上面的操作后,cocos2d内部会把该图片加载到CCTexture2D类的图像资源中。在这里,顺便提一下,由于ios设备只支持尺寸为“2的n次幂”的纹理,即图片的长宽只能伟:2、4、8等像素。如果你有一张贴图,大小为*像素位色的图片,那么就比较悲剧了。你觉得它在内存中应该只占用**4=KB左右的空间,单实际上,它占用了**4=1MB的内存。

CCSprite还有一个比较重要的就是位置问题,想象下现实生活中,如果你要把一张照片钉在墙上某个问题,你会怎么做?首先,你会把图钉插在照片上的某个点(在cocos2d中称为anchorPoint),然后你会确定要把这个图钉订在墙上的某个位置(在cocos2d种称为positon),这两个点就能确定照片在墙上的位置了。比如你想把照片放到左下角,那么你可以选择将图钉钉在照片的左下角(0,0),然后钉在墙的左下角(0,0).或者,你可以选择把图钉定在照片的右上角(1,1),然后把照片订在墙的(照片长,照片宽)的位置。auchorPoint表示的其实是一个百分比,用来标明相对于图片左下角的(长*百分比,宽*百分比)像素的位置,比如auchorPoint为(0.5, 0.5), 那么在图片的坐标系里,它标明的位置就应该是(长*0.5, 宽*0.5)的位置,也就是图片的中心点。最好好anchorPoint设置成(0.5, 0.5),也就是在图片的中心,这样,当你进行旋转、缩放等动作的时候,会比较方便。幸运的是,anchorPoint的默认位置就是(0.5,0.5).

CCLabelTTF

这个类的作用就是在屏幕上显示文本。cocos2d内部会以制定的字体作为参数创建一个CCTexture2D对象,也就是一张纹理,然后再用改纹理渲染出最后显示的文本.因为每次文本发生改变,就要做一次上述工作,所以cocos2d的文档中也建议改用CCLabelAtlas或者CCLabelBMFont代替。

你可能会发现,每次修改标签上的文本时候,这些文本都会自动中对齐,如果要改成左对齐,或者右对齐这些,只需要改变anchorPoint的属性就可以了。

动作CCAction:CCActionEase是CCActionInterval的子类:

动作是可以用来让节点执行诸如移动、旋转、缩放、变色、消失等很多动作。由于他们能作用在所有的节点上,因此可以对精灵、标签甚至菜单或整个场景施加动作。动作在完成后,会自动从节点上清除并释放它所占用的内存。

动作又分为即时动作和延时动作。延时动作就是我们一般理解上的动作,比如让一个精灵移动到哪里。即时动作,一般就类&#;于设置精灵的属性等,及时动作平时看起来是没有多大意义的,一般要配合后文所述的动作序列。

1)重复动作

这个很容易理解,就是让一个动作不停的重复,可以用这个方法创建无限循环的动画。使用起来也很简单,例如下面这个让一个节点不停的旋转:

还有一个类CCRepeat是让一个动画重复多少次,函数原型如下:

2、流畅动作(CCEaseAction)

一般的动作,比如你定义了一个物体是向哪个方向移动,那么它就会匀速的过去,但是很显然,我们喜欢更有点变化的动作,比如加速进入,然后迅速一段时间,再减速停止,流畅动作就是用来做这个的。

3、动作序列

CCSequence,这个比较好理解,就是定义一组动作,然后让他们按照这个顺序执行。

cocos项目移植android(一) 公司派我负责cocos项目移植android平台的任务,(我自己),之前搞过一点NDK,并没有cocos项目移植经验,身边也没人去问,所以本人开启苦模式。各种度

cocos2dx 资源加密 总连接:

使用coco2dx3.5制作游戏 昨天在网上看到了一个大神在mac下写的算法,看后觉得很长见识,算法什么的我最头痛了,看了源码之后,自己建了了项目移植到windows的vs下,改

标签: cocos2dx4.0教程

本文链接地址:https://www.jiuchutong.com/biancheng/369044.html 转载请保留说明!

上一篇:【深入了解cocos2d-x 3.x】一步一步通过ClippingNode实现一个功能完善的跑马灯公告(1)(cocos-creator)

下一篇:cocos项目移植android(一)(cocos creatorapi)

  • 账面价值大于计税基础是什么差异
  • 外贸企业的出口收入免征其地方水利建设基金
  • 小规模纳税人加油发票可以抵扣吗
  • 一般纳税人附加税优惠政策2023
  • 营业总收入包含投资收益吗
  • 房地产公司属于第几产业
  • 差额征税劳务费发票
  • 企业销售使用过的固定资产
  • 发票中奖要交税吗
  • 新成立公司注资流程
  • 开发票零税率和免税是一样的意思吗
  • 进项虚假怎么处理
  • 职工福利费和教育费的计提比例
  • 出租土地收入记什么科目
  • 采购核算成本的核算方法
  • 策划公司费用怎么算
  • 苹果系统如何访问相册
  • 会计凭证和记账凭证的区别是什么
  • 申报专利 费用
  • 进项票与实际支出金额不符
  • 开具的服务费怎么做分录
  • 专票 普票
  • 通用文件系统
  • php bcsub
  • 结转完工工程成本是什么
  • 发票填开的基本规定?
  • wordpress经典编辑器用法
  • 直接材料费用包括
  • 企业类型变更是什么意思
  • php rtrim
  • php获取当天是星期几
  • 减值准备递延所得税资产
  • zencart安装教程
  • 超级鸽卫星
  • linux shell
  • gpt最大
  • redissessiondao
  • php连接mysql8.0
  • java枚举写法
  • 分公司二季度安全生产分析会内容
  • 收缩数据库日志文件对数据有影响吗
  • 残保金如何做会计分录
  • 税费改革的思路
  • 购买税控盘费用能全额抵扣吗
  • 研发产品收入的会计分录
  • 暂估费用科目
  • 工程承建方给予什么赔偿
  • 房地产企业内部控制的现状
  • 货款扣除质量赔款
  • 其他应付款个人往来的涉税风险
  • 收到银联代收短信
  • 车费属于什么会计科目类
  • 工业会计科目有哪些
  • sql server Bulk Insert命令详细
  • mysql函数大全以及举例
  • mysql密码忘了怎么办?
  • windos桌面
  • vhd 打开
  • vim如何操作
  • linux命令放在哪个路径
  • linux cat 命令
  • centos6 service
  • xp系统java环境变量配置
  • 进程mmc.exe
  • unity3d怎么删除模型
  • 如何理解闭包,闭包的优缺点
  • unity网格地形
  • python编写代码的步骤
  • javascript教程
  • js初级教程
  • js合并字符串
  • 保险公司个人所得税扣除标准是多少
  • 移动退订业务怎么恢复
  • 国家税务局申报系统操作步骤说明在哪里看
  • 一季度土地市场
  • 税务登记证办理
  • 安置残疾人即征即退
  • 地税局社保宣传标语
  • 税务稽查查哪些
  • 四川投诉电话查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设