CCNode作为渲染框架的基类(暂且这样理解,CCObject为引擎基类)其中定义了绘制游戏元素相关的属性以及相关方法。属性当中需要注意的一个是Z坐标,在渲染框架中用来表示元素的遮挡关系,其值越小越容易被遮挡。而在元素的操作方面提供三类方法:对节点的操作、定时器的使用、执行动作。

1)节点的操作

引擎将游戏元素组织成树的结构,这也是CCNode命名中Node的来源。对树的操作无非就是添加节点、移除节点等等,但我们也要看到节点操作中引起的其他操作。如在运行状态(何为运行状态,在执行动作?执行定时器的回调函数?自己先mark一下)的节点添加子节点调用onEnter(进入场景)和onEnterTransitionDidFinsh(场景转换完成)函数。另外在移除节点函数中有一个bool类型的参数cleanup,书中将其理解为“清除”。初看也不甚明白,还是看看代码吧:

void CCNode::removeChild(CCNode* child, bool cleanup)
{
// explicit nil handling
if (m_pChildren == NULL)
{
return;
} if ( m_pChildren->containsObject(child) )
{
this->detachChild(child,cleanup);
}
} void CCNode::detachChild(CCNode *child, bool doCleanup)
{
// IMPORTANT:
// -1st do onExit
// -2nd cleanup
if (m_bIsRunning)
{
child->onExitTransitionDidStart();
child->onExit();
} // If you don't do cleanup, the child's actions will not get removed and the
// its scheduledSelectors_ dict will not get released!
if (doCleanup)
{
child->cleanup();
} // set parent nil at the end
child->setParent(NULL); m_pChildren->removeObject(child);
}
void CCNode::cleanup()
{
// actions
this->stopAllActions();
this->unscheduleAllSelectors(); if ( m_eScriptType != kScriptTypeNone)
{
CCScriptEngineManager::sharedManager()->getScriptEngine()->executeNodeEvent(this, kCCNodeOnCleanup);
} // timers
arrayMakeObjectsPerformSelector(m_pChildren, cleanup, CCNode*);
}

// 上面代码已经相当明白就是停止当前节点所有动作和定时器,释放相关资源

函数removeAllChildrenWithCleanup用于清除当前节点的所有的子节点并停止动作和计时器。看到这个函数让我明白书中对节点操作中使用“移除”一词而没有使用“删除”,其实上面   代码也有体现。移除仅仅将节点从树结构中摘下,但该节点任然在存在于内存中,以后我们还可以使用。我想这也是cleanup参数存在的原因之一。

2)CCNode中的定时器

根源种子包含一个默认的定时器,定时器采用循环执行的方式。这点就像winForm中的Timer控件,知道我们发出停止的命令要不就一直循环。定时器的操作主要包含启动、取消、暂停与恢复,从函数名称已经能理解他的功能和作用。但还是有一个 参数值得记录一下:int类型的priority用于表示定时器执行的优先级,其值越小表示优先权越高。默认的定时器其值为0表示最高优先权,将在每次引擎循环周期(??)中调用。

动作执行和场景转换前面还讲得比较少就先不记录了,最后还是上一张CCNode子类图:

CCNode几个重要的子类,从左向右依次场景、图层、菜单、精灵和粒子系统类。

01--从根源种子CCNode说起的更多相关文章

  1. Cocos2DX新手入门笔记索引

    01--从根源种子CCNode说起 02—从Cocos2DX视角看游戏组成 03--理解HelloWorld结构 04--简单菜单使用 05--简单场景切换与精灵创建 06--触摸事件响应 07--动 ...

  2. js 函数

    函数:封装了某一块功能 四要素: 1.返回类型 2.函数名 3.参数列表4.函数体强类型语言 返回类型 函数名 首字母大写 参数列表string(字符串) Show (int a){ 函数体 }弱类型 ...

  3. Spark计算模型

    [TOC] Spark计算模型 Spark程序模型 一个经典的示例模型 SparkContext中的textFile函数从HDFS读取日志文件,输出变量file var file = sc.textF ...

  4. [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)

    上一节链接:http://www.cnblogs.com/zjutlitao/p/4116783.html 前言: 在上一节中我们已经大致介绍了该软件的是什么.可以干什么以及界面的大致样子.此外还详细 ...

  5. Cocos2D-x权威指南: CCNode类方法:

    5.1.4 画图节点CCNode和图层CCLayer CCNode中提供的方法,在public块中的方法主要有下面几个部分: 1.针对节点显示的属性信息读写 2.针对节点变换的属性信息读写 3.针对子 ...

  6. 【搜索引擎Jediael开发4】V0.01完整代码

    截止目前,已完成如下功能: 1.指定某个地址,使用HttpClient下载该网页至本地文件 2.使用HtmlParser解释第1步下载的网页,抽取其中包含的链接信息 3.下载第2步的所有链接指向的网页 ...

  7. java中byte, iso-8859-1, UTF-8,乱码的根源

    Post@https://ryan-miao.github.io 背景 还是多语言, 在项目中遇到本地环境和服务端环境不一致乱码的情形.因此需要搞清楚乱码产生的过程,来分析原因. 获取多语言代码如下: ...

  8. openGL实现图形学扫描线种子填充算法

    title: "openGL实现图形学扫描线种子填充算法" date: 2018-06-11T19:41:30+08:00 tags: ["图形学"] cate ...

  9. bittorrent 学习(一) 种子文件分析与bitmap位图

    终于抽出时间来进行 BITTORRENT的学习了 BT想必大家都很熟悉了,是一种文件分发协议.每个下载者在下载的同时也在向其他下载者分享文件. 相对于FTP HTTP协议,BT并不是从某一个或者几个指 ...

随机推荐

  1. DEDE函数

    Html2text() 函数是去掉html标签代码. cn_substr(str,) 函数是截取字符串长度. 当然,他们也可以合并起来使用: [field:body function="cn ...

  2. Symfony2源码分析——启动过程2

    文章地址:http://www.hcoding.com/?p=46 上一篇分析Symfony2框架源码,探究Symfony2如何完成一个请求的前半部分,前半部分可以理解为Symfony2框架为处理请求 ...

  3. 一个Hadoop难以查找的错误

    This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starting namenodes on [Master1 ...

  4. C 语言链表操作例程 (待完善)

    #include<stdio.h>#include<malloc.h>#include<conio.h>#include<stdlib.h>#inclu ...

  5. Nokia N9开启开发者模式

    最近淘宝买个二手Nokia N9,纯粹是好奇meego系统. 到手了开始折腾,官方源早关闭了,导致无法开启开发者模式,没有权限很不方便.翻了翻dospy论坛的帖子,发现了n9repomirror_0. ...

  6. 较优H圈matlab实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang %解决完备图中的较优H圈 clc clear w = [ inf 6 1 8 3 1 ;...   ...

  7. linux下查看和设置软件的安装路径

    1:你可以通过whereis 软件名来查找系统里的文件位置 比如你想查找eclipse文件,那么就: [root@localhost ~]# whereis eclipse 会显示: eclipse: ...

  8. windows设备驱动安装接口(自己仿写)

    /***************************************** Author:foo_hack This is File named:Setup.h The Funtion Im ...

  9. MySQL常用Json函数

    官方文档:JSON Functions Name Description JSON_APPEND() Append data to JSON document JSON_ARRAY() Create ...

  10. 【转】Android Service完全解析,关于服务你所需知道的一切(下) ---- 不错

    原文网址:http://blog.csdn.net/guolin_blog/article/details/9797169 转载请注册出处:http://blog.csdn.net/guolin_bl ...