我所理解的cocos2dx - cocos2dx架构一憋(下)

ui树及运行时游戏对象

  node类是所有ui元素的基类,我们看看它有啥属性

1.位置和变换

  position:位置,决定元素显示位置

  anchorPoint:锚点,决定元素哪个部分处于这个位置上,这点范围(0-1, 0-1)

锚点示意图,假设元素在100,100,锚点为0.5,0.5,则图内中间的点处于100,100这位置

  两个点决定元素在屏幕哪个位置。锚点影响元素的变换操作,例如旋转缩放等。

2.坐标系

  世界坐标系:原点屏幕左下,向右x,向上y

  本地坐标系:元素对于自身的坐标系,元素的左下角为原点,右x上y

坐标转换:本地坐标和世界坐标之间的相互转换

    p1->convertToNodeSpace(p2->getpos())处于世界坐标的p2的位置转为p1的本地坐标

    p1->convertToWorldSpace(p2->getpos())处于p1本地坐标系的p2的位置转为世界坐标

    p1->convertToWorldSpaceAR((0,0))获取本身锚点为原点在世界坐标系的位置

3.ui树

  树的概念不阐述,ui元素用树来表示,即每一个ui元素有一个父节点,n个子节点,其决定元素层级,绘制顺序,坐标变换,查找等。

  ui树的遍历:3d游戏里ui元素可以在任何顺序绘制,因为后面会进行深度测试,而2d则由绘制顺序决定能否被显示,所以需要一层逻辑深度。引擎里有localZOrder和globalZOrder。ui树使用中序遍历。根左边的localz为负数,右边为正数。但是localz是针对元素本身父节点的,如果某节点突然要显示,就要修改其父节点,所以globalz可以用了。元素的globalz默认为0,不为0就优先使用globalz进行绘制顺序决定。绘制顺序影响事件分发的顺序哦。

  opengl es并没树的概念,所以需要传入元素的模型变换矩阵进去,这矩阵是相对于世界坐标的。计算方式是父节点的模型视图变换矩阵右乘当前本地坐标的变换矩阵得到。并且只有当脏标记true才会重新计算,来优化性能。

  

  ui元素和内存管理:即上一次说的AutoreleasePool应用,create加入池。如果需要父节点,需要先手动retain防止被释放。

4.应用程序架构

  游戏生命周期:applicationDidFinishLaunching() 初始化游戏数据

         applicationDidEnterBackGround()游戏进入后台

         applicationWillEnterForeground()游戏切回显示

  窗口大小:WinSize画布大小,VisiableSize可视窗的大小,winSizeInPixels屏幕实际像素分辨率

  场景管理:导演类有各种方法

  游戏循环:

5.实时更新游戏对象

  帧率:就是fps

  scheduler:注册回调,尽量往这注册,而非用node自带的注册

  时间线:默认为1,设置可实现全体加速和减速

6.cocos2dx 主线程

  cocos2dx为单线程,几乎不考虑线程安全问题,但需要留意各类异步的情况。

  在主线程中执行异步处理:scheduler->performFunctionInCocosThread(,,,)注册一个方法指针,让他在所有schedule方法执行后检查和执行。

  纹理的异步加载:textureCache会向schedule注册回调addImageAsyncCallback,然后开新线程加载纹理,完毕后会存在_imageInfoQueue,回调执行时会去检查里面有否数据,有则上传到gl内存,然后删除其数据,当所有加载完毕,则注销更新回调。

时间: 2024-10-11 00:17:27

我所理解的cocos2dx - cocos2dx架构一憋(下)的相关文章

理解本真的REST架构风格

引子 在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过“REST”这个buzzword,显然已经落伍了.夸张点说,甚至“出了门都不好意思跟别人打招呼”.尽管如此,对于REST这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在“盲人摸象”的阶段.常常听到各种各样关于REST的说法,例如:有人说:“我们这套新的API决定不用Web Service(SOAP+WSDL),而是直接使用HTTP+JSON,也就是用RESTful的方式来开发.” 不用SOAP,甚至也不用

理解本真的REST架构风格(转)

本文是“深入探索REST”专栏系列深度内容中的第二篇,它将带您领略REST架构的起源.与Web的关系.REST架构的本质及特性,以及REST架构与其他架构风格之间的比较. 引子 在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过“REST”这个buzzword,显然已经落伍了.夸张点说,甚至“出了门都不好意思跟别人打招呼”.尽管如此,对于REST这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在“盲人摸象”的阶段.常常听到各种各样关于REST的说法,例如:有人说

cocos2d-x 3.0在mac下的基本配置

随着3.0正式版的发布,有必要开始对其进行一番研究.首先就从环境搭建以及基本的配置开始. 其实在cocos2d-x的官方wiki中已经有了比较详细的介绍,只不过是英文的,这里针对实际操作给大家简单翻译说明一下. 创建一个cocos2d-x项目 1.1 环境需要 Android 2.3 或更新版本 ios 5.0 或更新版本 OS X 10.7 或更新版本 Xcode 4.6 以上版本 gcc 4.7 和Android ndk-r9以上版本 Python 2.7.5 1.2 创建一个新的项目 首先

深入理解REST与Servlet架构的区别

深入理解REST与Servlet架构的区别 本身这个比较是个伪命题,因为 RESTful Service是一个软件架构"风格", 而servlet是java 服务端的一种技术 之所以把它们拿出来比较,是由于它们代表了两个时代的技术风格与架构.下面就来阐述这两种技术架构的区别. Servelt API是1998年发布的,它的核心API一直变化不大,非常稳定,也是JavaEE众多API中最成功的一个.基于Servlet API产生了众多的框架,比较大家最熟悉的Structs,Spring

[转]理解本真的REST架构风格-By李锟

最近看到一个词语“REST”风格,就百度了一下,度娘很给力,下面就是我认为写的最好的一篇介绍. 原文地址:http://www.infoq.com/cn/articles/understanding-restful-style 本文是“深入探索REST”专栏系列深度内容中的第二篇,它将带您领略REST架构的起源.与Web的关系.REST架构的本质及特性,以及REST架构与其他架构风格之间的比较. 引子 在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过“REST”这个bu

[Cocos2d-x]Cocos2d-x 3.2 学习笔记

获取屏幕大小(Visible) Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); 打印调试(CCLOG) CCLOG("Characters: %c %c", 'a', 65); CCLOG("Decimals: %d %ld", 1977, 650000L); C

修复cocos2dx的Label,WP8下不能换行的问题

搞了几个小时,这个头疼的问题,我给出代码吧. 找到 libcocos2d/platform/winrt/CCFreeTypeFont.cpp (其中libcocos2d是项目名)然后将其中的函数 addWord 替换为我提供的即可.实在找不到文件的同学直接搜索吧. 需要注意的是我只简单处理了一下,所以中文下只支持UTF8字符串,非UTF8字符串会出问题.当然英文环境下任然是用默认逻辑. 我的cocos2dx版本是 3.2,如果你的版本不是这个,存在个别差异,那就自己改改吧. 希望大家拿走代码的时

转:理解本真的 REST 架构风格

引子 在移动互联网.云计算迅猛发展的今天,作为一名 Web 开发者,如果您还没听说过"REST"这个 buzzword,显然已经落伍了.夸张点说,甚至"出了门都不好意思跟别人打招呼".尽管如此,对于 REST 这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在"盲人摸象"的阶段.常常听到各种各样关于 REST 的说法,例如:有人说:"我们这套新的 API 决定不用 Web Service(SOAP+WSDL),而是直接使用 H

系统架构师-基础到企业应用架构-系统建模[中篇](下)

一.上章回顾 首先.我们先来回顾下,上篇讲解的内容,加深下印象.上篇我们主要讲解了3个建模图形分别是:顺序图(序列图).组件图.状态图. 具体功能描述如下图:这里不详细解释,如果不清楚请看:系统架构师-基础到企业应用架构-系统建模[中篇](上) 由于全部放在一篇中篇幅太长了,所以分开讲解. 二.摘要 本文主要讲解:UML建模图中的活动图.部署图等 上图中就是本章要讲解的内容,本质将仔细的剖析,部署图与组件图的关系与区别,活动图与状态图的关系与区别. 三.本章内容 1.上章回顾. 2.摘要. 3.

构建高并发高可用的电商平台架构实践(下)

构建高并发高可用的电商平台架构实践(下) 6. 数据存储 数据库存储大体分为以下几类,有关系型(事务型)的数据库,以oracle.mysql为代表,有keyvalue数据库,以redis和memcached db为代表,有文档型数据库如mongodb,有列式分布式数据库以HBase,cassandra,dynamo为代表,还有其他的图形数据库.对象数据 库.xml数据库等.每种类型的数据库应用的业务领域是不一样的,下面从内存型.关系型.分布式三个维度针对相关的产品做性能可用性等方面的考量分析.