自定义绘图
引擎在CCNode中預(yù)留了自定義繪圖接口,如: 1 void CCNode::draw()
2 {
3 //CCAssert(0);
4 //可以重載此方法
5 //最好僅在這個(gè)方法中繪制自定義的內(nèi)容
6 }
?
draw函數(shù)是一個(gè)每幀都會(huì)調(diào)用的函數(shù),注釋中明確指出,通常情況下只應(yīng)該在這個(gè)函數(shù)內(nèi)編寫自定義繪制效果,不要再這個(gè)函數(shù)以外的任何地方繪圖。這是因?yàn)橐嬖谶@個(gè)函數(shù)調(diào)用的上下文之間進(jìn)行了繪圖環(huán)境的準(zhǔn)備和必要的狀態(tài)設(shè)置。在其他地方添加繪制代碼可能引起不可預(yù)料的錯(cuò)誤。 遮罩層 遮罩效果又稱剪刀效果,允許一切的渲染結(jié)果只在屏幕的一個(gè)指定區(qū)域顯示:開啟遮罩效果后,一切都繪制提交都是正常渲染的,但最終只有屏幕上的指定區(qū)域會(huì)被繪制。 數(shù)據(jù)交流 CCImage和CCTexture2D是引擎提供的描述紋理圖片的類,也是和顯卡進(jìn)行數(shù)據(jù)交換時(shí)主要涉及的數(shù)據(jù)結(jié)構(gòu)。 CCImage: CCImage在“CCImage.h”中定義,表示一張加載到內(nèi)存的紋理圖片。在其內(nèi)部的實(shí)現(xiàn)中,紋理以每個(gè)像素的顏色值保存在內(nèi)存之中。CCImage通常作為文件和顯卡間數(shù)據(jù)交換的一個(gè)工具,因此主要提供了兩個(gè)方面的功能:一方面是文件的加載與保存,另一方面是內(nèi)存緩沖區(qū)的讀寫。 我們可以使用CCImage輕松地讀寫圖片文件,目前,CCImage支持PNG、JPEG、和TIFF三種圖片格式。 以下幾個(gè)方法: 1 bool initWithImageFile(const char* strPath, EImageFormat imageType = kFmtPng); 2 bool initWithImageFileThreadSafe(const char* fullpath, EImageFormat imageType = kFmtPng); 3 bool saveToFile(const char* pszFilePath, bool bIsToRGB = True);?
CCImage也提供了讀寫內(nèi)存的接口。getData和getDataLen這兩個(gè)方法提供了后去當(dāng)前紋理的緩沖區(qū)的功能,而initWithImageData方法提供了使用像素?cái)?shù)據(jù)初始化圖片的功能。 如下: 1 unsigned char* getData(); 2 int getDataLen(); 3 bool initWithImageData(void* pData, int nDataLen, EImageFormat eFmt = kFmtUnKnown, int nWidth = 0, int nHeight = 0, int nBitsPerComponent = 8); 4?
CCTexture2D: 它描述了一張紋理,知道如何將自己繪制到屏幕上。通過該類還可以設(shè)置紋理過濾、抗鋸齒等參數(shù)。還提供一個(gè)接口,將字符串創(chuàng)建成紋理。 值得注意的是:該類所包含的紋理大小必須是2的冪次,因此紋理的大小不一定就等于圖片大小;另外,有別于CCImage,這是一張存在于顯存中的紋理,實(shí)際上并不一定存在于內(nèi)存中。 截屏功能: 首先,我們使用OpenGL的一個(gè)底層函數(shù)glReadPixels實(shí)現(xiàn)截圖: void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);?
//這個(gè)函數(shù)講當(dāng)前屏幕的像素讀取到一個(gè)內(nèi)存塊pixels中,且pixels指針指向的內(nèi)存必須足夠大。?
轉(zhuǎn)載于:https://www.cnblogs.com/Blogs-young-chan/p/5250391.html
總結(jié)
- 上一篇: 全国软考数据库系统工程师教程(第2版)目
- 下一篇: ./ 表示当前路径 ../ 表示上一级