cocos2dx之积累点滴(一)

本人的习惯,在学习时一支笔、一个记事本伴随其身,记录下思路,应该这就是屌丝的气息,用不惯高大上的blog,其实说穿了是文笔不行,每每写的东西都词不达意,怕大家看到了会受误导。这次转blog是因为笔记本太多了,找以前记过的文章太费劲。好了,不费口水了,记录点点滴滴,从自己做起。下面就是记录下我学cocos2dx的点点滴滴。鉴于本人才疏学浅,如有不正之处,请多多谅解,不喜勿喷。

基本概念:      

  稍微有点接触过的cocos的都知道,cocos中最重要的几个概念就是导演(Director)、场景(Scene)、层(Layer,有的人习惯叫法为布景层)、精灵(Sprite)、节点(Node)等。导演控制着游戏的整个流程,而游戏流程的执行是通过切换一个个的场景来达到目的的,场景中又可以分为不同的层,一个层中又可以拥有任意多个的可见节点。下图是cocos2dx官网上的原图。

导演:

  Director类是整个cocos2d引擎的核心,它控制着整个游戏的流程  (即场景的切换) ,包括获取窗体大小、投影类型、帧率设置、openGlView的设置和获取、事件分发、调度器的获取和设置等。我们可以通过调用 sharedDirector() / getInstance() 来获取我们Director实例,它采用单例设计模式,以便更好的管理和简化Director的操作。查看Cocos的源代码可以知道, virtual void setAnimationInterval(double interval) = 0;   为纯虚函数,所以Director类为抽象类,不能实例化。因此可以推出真正获取到的是一个指向Director子类的实例。具体可看cocos的源代码,它获取的  DisplayLinkDirector  的实例。 (注: sharedDirector()方法是3.x版本之前的,已不在维护,但是仍可用)

                      

场景:

  Scene类虽然很重要,但其实在Cocos中的代码不是很多,具体可以自行阅读,它派生自Node类,它的作用就是构建一个游戏中可见节点运行的环境,类似于唱大戏中的舞台,可以对舞台进行不同的装饰,并在之上表演不同的剧情。游戏中,切换场景就是代表着游戏的流程的执行过程。而控制场景切换是由Director类执行的。Director类提供了常见的操作场景的方法:

  • runWithScene( Scene *scene ) 启动游戏,并运行scene场景。本方法在主程序第一次启动主场景的时候调用。如果已有正在运行的场景则不能调用该方法;会调用pushScene-->startAnimation。
  • pushScene( Scene *scene ) 将当前运行中的场景暂停并压入到代码执行场景栈中,再将传入的scene设置为当前运行场景,只有存在正在运行的场景时才调用该方法;
  • replaceScene( Scene *scene ) 直接使用传入的scene替换当前场景来切换画面,当前场景被释放。这是切换场景时最常用的方法。
  • popScene() 释放当前场景,再从代码执行场景中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,直接结束应用。和PushScene结对使用
  • end() 释放和终止执行场景,同时退出应用
  • pause() 暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上
  • resume () 恢复当前运行场景的所有计时器和动作,场景仍然会显示在屏幕上

层:

  Layer是处理玩家事件响应的Node子类。与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸,加速度计和键盘输入等。我们需要在层中加入精灵,文本标签或者其他游戏元素,并设置游戏元素的属性,比如位置,方向和大小;设置游戏元素的动作等。 (注: 场景也可以直接在屏幕上显示内容哦)

精灵:

  Cocos2d中的精灵和其他游戏引擎中的精灵相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。主要的类关系如下: 简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。

  创建精灵的三种方法:

  1、直接创建精灵。

1    auto sprite = Sprite::create("helloworld.png");
2    this->addChild(sprite, 0);

  2、 使用纹理创建精灵。

1    auto sprite = Sprite::createWithTexture(TextureCache::getInstance()->addImage("helloworld.png");
2  this->addChild(sprite, 0);

  3、使用精灵帧来创建精灵。

1   auto sprite = Sprite::createWithSpriteFrameName("helloworld.png");
2   this->addChild(sprite, 0);

第一篇Cocos的文章,先引个场,后面继续笔记下去,虽然一篇blog的时间比较长,但为以后服务更加方便。

时间: 2024-08-29 05:11:29

cocos2dx之积累点滴(一)的相关文章

JS实战 · 实践积累点滴杂烩

onmouseover : 鼠标进入 onmouseout : 鼠标离开 onfocus:得到焦点 表单提交执行JS代码,有两种常用方式. 一:在局部(比如按钮定义处)用onclick="return Check()"; 二:在表单form处用onsubmit="retnrn Check(this)"; 表单提交验证:灵活运用returnValue 取消超链接的效果:<a href="javascript:void(0)"></

javascript基础拾遗——词法作用域

本来是想写js面向对象笔记(二)关于封装的,但是在敲实例代码的时候,发现对作用域这个东西的概念有点模糊,翻阅了犀牛后,有点感觉了,就想着先记录下此时的感受. 之所以取名叫做词法作用域,是这个概念是js中相当基础也是极为重要的,很多想当然的错误或感觉怪异的问题都是和这个东西有关.所以,本文主要说下这个名词的概念以及讨论下他牵扯出来的有关变量.函数.闭包的问题. 1.由变量开始谈 习惯性先来段代码: 1 var x = "globol value";2 var getValue = fun

深度影响价值

第一篇博文,用来表达一下内心的感受... 出差,已经很多次,这种海外研究所与总部之间的合作模式,给人的感觉总是千丝万缕: 项目交流,司空见惯,这种duplicate或者similar的result...可是,也许我不是参与者~ 能力的提升,或者价值的认可,如何做到? 不是喊口号,也不是简单的demo,而是要用心投入,一丝不苟的付出: 为公司?为自己? You know! 项目变化太快,不是领导的问题,也不是公司的问题,是一种趋势,因为,时代变化的太快,不变的是变化. Changing,what

如何使用火狐浏览器的Poster插件进行post请求

原文:http://blog.csdn.net/cjm2484836553/article/details/72453907 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 安装Poster的步骤 使用Poster 不诗意的女程序猿不是好厨师~ [转载请注明出处:From 李诗雨----http://blog.csdn.net/cjm2484836553/article/details/72453907] 善假于物者,正途也.学会利用身边的工具,可以事半功倍哟~ 我之前也

HiJson工具 &amp;&amp; 火狐浏览器中的jsonHandle插件(以及乱码问题的解决)--&gt;来转换json串的格式

原文:http://blog.csdn.net/cjm2484836553/article/details/72453907 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 安装Poster的步骤 使用Poster 不诗意的女程序猿不是好厨师~ [转载请注明出处:From 李诗雨----http://blog.csdn.net/cjm2484836553/article/details/72453907] 善假于物者,正途也.学会利用身边的工具,可以事半功倍哟~ 我之前也

python魔法师solo数字游戏

前言 先学学基础的python,万事开头难!还是好好学学开发吧! 直接上干货 #coding:utf8 s=input('请输入一个年份:') s=int(s) year=False if s % 100 ==0 and % 400 ==0: year=True elif s % 100 !=0 and s % 4 ==0: if year: pirnt('闰年') else: print('平年') Python运算函数 #coding:utf8 lsl=input('输入成绩') if ls

点滴积累【C#】---验证码,ajax提交

效果: 思路: 借用ashx文件创建四位验证,首先生成四位随机数字.然后创建画布,再将创建好的验证码存入session,然后前台进行button按钮将文本框中的值进行ajax请求到后台,和session中的验证码进行对比,成功返回true,失败返回false. 代码: [前台] 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="verifycodeDemo.aspx.cs"

移动前端webApp开发点滴积累20140629

#移动前端webApp开发点滴积累20140629 ##关于input行内居中的问题 给input设定一个比较高的高度,在某些版本的移动设备上,文字不能垂直居中,即使设定了相同的行高也不行.(见图) ![input行内居中](http://images.cnitblog.com/i/84053/201406/292134125542918.jpg) 在这种情况下,我一般不改变input本身的高度,而是在input外围包裹一层,再在外围层做效果. [demoURL](http://gh.p2227

点滴的积累---J2SE学习小结

点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习感受 近半个月的坎坷,总算是将马士兵的<J2SE教程>视频看完了,期间一些其它的事一些不得不处理的事总是打断我的安排.看了视频之后认为东西确实都非常基础给我印象最深的是关于程序执行的内存分析.IO和线程,这谁在之前不管是学习VB.VB.NET还是C#中都没怎么设计到的东西. 首先,我想对于一个初学