01--从根源种子CCNode说起
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说起的更多相关文章
- Cocos2DX新手入门笔记索引
01--从根源种子CCNode说起 02—从Cocos2DX视角看游戏组成 03--理解HelloWorld结构 04--简单菜单使用 05--简单场景切换与精灵创建 06--触摸事件响应 07--动 ...
- js 函数
函数:封装了某一块功能 四要素: 1.返回类型 2.函数名 3.参数列表4.函数体强类型语言 返回类型 函数名 首字母大写 参数列表string(字符串) Show (int a){ 函数体 }弱类型 ...
- Spark计算模型
[TOC] Spark计算模型 Spark程序模型 一个经典的示例模型 SparkContext中的textFile函数从HDFS读取日志文件,输出变量file var file = sc.textF ...
- [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)
上一节链接:http://www.cnblogs.com/zjutlitao/p/4116783.html 前言: 在上一节中我们已经大致介绍了该软件的是什么.可以干什么以及界面的大致样子.此外还详细 ...
- Cocos2D-x权威指南: CCNode类方法:
5.1.4 画图节点CCNode和图层CCLayer CCNode中提供的方法,在public块中的方法主要有下面几个部分: 1.针对节点显示的属性信息读写 2.针对节点变换的属性信息读写 3.针对子 ...
- 【搜索引擎Jediael开发4】V0.01完整代码
截止目前,已完成如下功能: 1.指定某个地址,使用HttpClient下载该网页至本地文件 2.使用HtmlParser解释第1步下载的网页,抽取其中包含的链接信息 3.下载第2步的所有链接指向的网页 ...
- java中byte, iso-8859-1, UTF-8,乱码的根源
Post@https://ryan-miao.github.io 背景 还是多语言, 在项目中遇到本地环境和服务端环境不一致乱码的情形.因此需要搞清楚乱码产生的过程,来分析原因. 获取多语言代码如下: ...
- openGL实现图形学扫描线种子填充算法
title: "openGL实现图形学扫描线种子填充算法" date: 2018-06-11T19:41:30+08:00 tags: ["图形学"] cate ...
- bittorrent 学习(一) 种子文件分析与bitmap位图
终于抽出时间来进行 BITTORRENT的学习了 BT想必大家都很熟悉了,是一种文件分发协议.每个下载者在下载的同时也在向其他下载者分享文件. 相对于FTP HTTP协议,BT并不是从某一个或者几个指 ...
随机推荐
- C++ 继承和包含的区别?
在<代码大全>这本书的第六章中提到了有关包含与继承的一些原则,我摘取如下: 一.包含("has a") 包含表示一个类含有一个基本数据元素或对象.包含是面向对象编程的主 ...
- VC中如何获取当前时间(精度达到毫秒级)
标 题: VC中如何获取当前时间(精度达到毫秒级)作 者: 0xFFFFCCCC时 间: 2013-06-24链 接: http://www.cnblogs.com/Y4ng/p/Millisecon ...
- odoo10会计期间
从odoo9,会计模块重构之后,去掉了account.fiscalyear 以及 account.period 这两个模型, 但不表示 odoo 从此就没有 "会计年度"和&quo ...
- 用js 做大图轮播方法(一)
//html部分 <div id="wrap"> <div id="slider"> <a target="_blank ...
- 摘录 javescript 常用函数
- HTTP断点续传(分块传输)(HTTP头格式非常清楚)
简述 断点续传:指的是在上传/下载时,将任务(一个文件或压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传/下载,如果碰到网络故障,可以从已经上传/下载的部分开始继续上传/下载未完成的部分, ...
- JAVA常用类库简介(转)
Java编程语言中为方便学习者学习,编制了许多类,这些类已经经过测试,都是我们编程的基础.如果不利用这些已存在的类,我们的编程工作将变得异常复杂并且效率低下.所以我们应尽可能多的掌握Java基本类库的 ...
- Mysql unix_timestamp() FROM_UNIXTIME和DATE_FORMAT(date,format)
mysql 中:UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) 若无参数调用,则返回一个 Unix timestamp ('1970-01-01 00:00:00' GM ...
- 【转】FAE及其发展前景
原文网址:http://blog.sina.com.cn/s/blog_6e80c27b0100okd9.html FAE Field Application Engineer(现场应用工程师) ,其 ...
- Corrupted MAC on input
Corrupted MAC on input Incorrect MAC received on packet