本文使用cocos2dx自带的hellocpp文件。
1. 先看sprite的创建,直接通过resource下的图片进行创建:
显示结果如下:红色箭头标注的人物就是通过图片创建的sprite。
使用creat的方法很方便的就创建了一个人物在画面上,那么cocos2dx究竟是如何实现的呢?因为这款引擎是开源的,所以我们可以直接通过代码深入到引擎内部看看。
直接查看creat的定义:
显然此方法是cocos2dx特有的创建方式,一般我们在使用c++的时候,惯例是在构造函数中给成员变量进行分配内存或初始化。但是在引擎中是单独使用create方法分配内存,
在init方法中初始化,读者可以自行看看hellocpp的构造函数和析构函数都是没有实现的。通过create的定义,可以看出是一个单例模式。
继续看代码,create内部分配了一块内存给指针pobSprite, 紧接着使用initWithFile进行初始化,从名字上猜测是通过文件来进行初始化或赋值。
继承查看initWithFile的定义:
可以看到此函数的关键点:addImage方法给一个全局变量sharedTextureCache中添加一张图片。这个全局变量可以暂时理解成图片的缓存区。ok,我们继续查看addimage的
定义。这个方法的定义比较长,对于一些常用的安全检测略过。
通过以上的代码,可以很清楚的看到:sharedFileUtils()->getFileDate(fullPath,c_str(),"rb",&nSize), 这不就是我们在c++中常用的文件的读取方法么?rb就是用2进制的方式
读取图片。这个应该很好理解了,图片可以是2进制存储的。
通过create的方法先分配一段内存,然后在这个内存中放入2进制的图片信息来进行初始化。这样sprite的创建就完成了。
接着就应该是图片的通过openGL的处理在显卡中转换成我们在屏幕中看到的sprite图片了。