位置: 编程技术 - 正文

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)

  • 计提附加税税会计分录
  • 税务师考哪5门
  • 以前年度什么意思
  • 一般纳税人登记证明
  • 销售费用计入产品生产成本吗
  • 报表申报错误怎么作废重报
  • 企业所得税按月还是按季度申报
  • 上月未计提税金,下月怎么做分录
  • 公司电话费用
  • 进项抵扣怎么操作
  • 公司一直没有做内账违法吗
  • 税务局代开的增值税专票可以红冲吗?
  • 支付货款订金入什么科目核算与会计分录
  • 进项税额不可抵扣
  • 增值税零税率发票开具条件
  • 烟草生产者消费税计算方法
  • 租金收入的印花税税率是多少
  • 季度不超过30万免税分录
  • 季报小微企业不包括哪些
  • 银行代扣社保费
  • 投资预算的编制方法
  • 暂估固定资产原值减少
  • 如果被客户骗了货款怎么办
  • 社保缴费要和工龄一致吗
  • 中秋福利费会计分录
  • laravel use
  • 公司取得的营业收入
  • 职工教育经费会计准则最新规定
  • vue父组件引入子组件
  • 划转国有划拨土地流程
  • php中的pdo
  • php socket_create
  • mapbox怎么用
  • /f命令
  • 其他科技推广服务业可以加计扣除吗
  • 募股方案
  • 私对公可以转账吗?会对做账不利吗
  • mysql 索引类型以及使用场景
  • 房地产公司土地计入什么科目
  • 帝国cms真的很好用
  • 公司的现金收入包括
  • 预收账款可以用什么科目核算
  • 建筑安装的扩展性是指
  • 一次还本付息债券定价公式
  • 员工补助每月申报怎么填
  • 营业执照办理税务登记需要什么资料
  • 毛利率代表什么?如何计算毛利率?
  • 开票金额为什么是负数
  • 费用暂估入账后期如何冲销
  • 劳务派遣公司收入确认税收政策
  • 物业所在地是指物业住所地吗
  • 无法收回的款项怎么记账
  • 旅行社代订机票发票报销
  • 会计科目的设置原则包括( )
  • 网上打印的电子机票可以报销不
  • 企业开发是什么专业
  • sql触发器菜鸟教程
  • mac系统10.10
  • win10系统怎么手机投屏到电脑
  • xp 修复
  • mac快捷键一览
  • win8关机立马自动重启
  • win7怎么进行系统还原
  • 怎样加快电脑开机速度
  • 原版windowsxp安装
  • 在windows xp的应用程序中,经常有一些
  • linux系统的
  • Win10 Mobile Build 10586.xx将持续更新 WP8.1用户可直升最新版
  • windows10移动
  • win10raw预览
  • javascript中函数
  • uploadify文件上传
  • jquery验证码
  • dirsearch批量
  • Linux 中的cat命令
  • unity相关问题
  • Unity 使用WWW类同步加载资源
  • ruby元编程第二版
  • android设计模式与最佳实践 pdf
  • 广东电子税务局官网登录入口手机版
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设