游戏引擎
文章平均质量分 84
CodeWorld_Flying
知其然知其所以然
展开
-
动手实现2d游戏引擎(一)
本人准备分析cocos2dx的引擎·实现一个2d引擎名字叫gl02下面是引擎一些基本类,后面会根据需要进行修改。CCNode:引擎节点基类,它的代码如下,它的核心方法visit是渲染节点的入口,它会先处理zorder小的子节点,然后调用自身的draw方法渲染自己,在处理zorder大的节点,这样子zorder大的就会后渲染,并且可以覆盖zorder小的节点。它的主要代码有计算节点的变化矩阵原创 2016-04-17 23:28:10 · 3821 阅读 · 0 评论 -
cocos2dx-CCControlButton源码分析
[TOC]CCControlButttonCCMenu简介CCControlButtton是按钮控件,有一个标签加背景图片构成,标签和背景可以只有一个存在。cocos的CCMenu以及提供了相应的空间功能,CCMenu同CCControlButtton一样派生于CCLayer,可以开启触摸。CCMenu的孩子CCMenuItem已经提供了简单的按钮功能了,可以由图片或者文字构建一个菜单项,CCMen原创 2016-07-04 23:17:25 · 2639 阅读 · 0 评论 -
cocos2dx CCUserDefault
在使用CCUserDefault时发现了问题,代码如下void testUserDefault(){ CCUserDefault *ud = CCUserDefault::sharedUserDefault(); const std::string path = ud->getXMLFilePath(); printf("UserDefault path:%s\n"原创 2016-06-21 17:33:37 · 525 阅读 · 0 评论 -
cocos2dx-实现CCDictionary的hash库uthash详解
uthash详解CCDictionary底层用的是uthash,追踪CCDictionary的接口,查看CCDictionary是如何利用uthash的接口的,以及uthash是怎么实现的。 下面是uthash的类图: tail方便uthash快速索引所有对象,每个bucket就是一个拉链法hash表的一个链表。客户变量m_pElements指向客户所有加入uthash中的客户对象构成的链表原创 2016-06-30 18:16:19 · 3912 阅读 · 0 评论 -
cocos2dx-深度解析plist文件(二)(CCSpriteFrameCache怎么从解析出的数据创建精灵帧的)
cocos2dx-深度解析plist文件(二)(CCSpriteFrameCache怎么从解析出的数据创建精灵帧的)精灵帧的创建CCSpriteFrameCache::addSpriteFramesWithDictionary(CCDictionary* dictionary, CCTexture2D *pobTexture)里面的CCDICT_FOREACH(framesDict,原创 2016-06-29 17:31:15 · 2917 阅读 · 0 评论 -
cocos2dx-详细剖析lua(如何与lua集成,如何导出lua api,如何与lua交互)
本文详解lua是怎么跟c/c++交互的;cocos怎么利用luac/c++交互的技术,导出lua api的供脚本使用;cocos如何进行c++与lua混合编程,cocos有哪些重要lua接口。一、lua与c/c++的交互1、lua简介lua是由c语言编写,c/c++程序可以包含lua库,利用提供的api进行lua脚本开发,lua提供了c与lua相互调用的接口。下面是lua的全部库文件:原创 2016-06-26 15:59:28 · 6943 阅读 · 0 评论 -
cocos2dx-触摸分发分析
本文分析的是cocos2dx-2.2.2的触摸分发机制。cocos利用底层的接口把消息包装发给了CCTouchDispatcher,ios平台就是用的ceglview这种视图,ios下一般应用编程我们都是用的系统提供的view,这些view可以接受触摸消息,显然ceglview也一样可以。同样也有4个触摸函数,began、moved、ended、cancled。cocos就是在里面进行了包装,原创 2016-06-22 18:10:06 · 700 阅读 · 0 评论 -
cocos2dx-内存管理剖析(智能指针的局限与引用计数的选择)
一、常用内存管理计数1、智能指针cocos的内存管理没有用智能指针,智能指针,c++有相应的类型,代码如下:#include using namespace std;class Obj{public: ~Obj(){ printf("destruct is called\n"); }};void testAutoptr(){ auto_ptr obj1(原创 2016-06-25 00:48:52 · 2638 阅读 · 0 评论 -
cocos2dx-精灵如何被渲染and纹理如何被管理、产生与销毁
一、精灵是怎么被渲染出来的cocos渲染用了opengl。所有精灵顶点的位置,都是真实的在opengl世界坐标系中的大小。这些点在XOY平面上,z都为0,它们进行模型视图变换,再进行投影变换,投影空间进行除法运算规格化最后通过视口变换转化为窗口上的一点。void CCDirector::setProjection(ccDirectorProjection kProjection){原创 2016-06-23 22:34:26 · 4207 阅读 · 0 评论 -
cocos2dx-CCSpriteBatchNode源码分析(VAO+VBO)
CCSpriteBatchNode简介CCSpriteBatchNode是用来一次渲染多个精灵的,这些精灵是CCSpriteBatchNode的孩子,并且使用同一个纹理,后面将详细分析CCSpriteBatchNode的孩子为什么用使用同一个纹理。多个纹理可以打包成一个纹理,然后通过精灵帧缓存载入这个纹理文件的属性文件,创建纹理与精灵帧,后面用相应的精灵帧创建精灵,这里省去了多次读取外部文件,创建多原创 2016-07-06 15:20:42 · 2181 阅读 · 0 评论