教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

深入分析Cocos2d-x 2.0中的“纹理”

来源:网络收集 时间:2026-10-03
导读: 深入分析Cocos2d-x 2.0中的“纹理” 另:本章所用Cocos2d-x版本为: cocos2d-2.0-x-2.0.2 @ Aug 30 2012 /download 大家好,最近工作实在是太忙了,公司项目这个月要进行对外测试,大伙都是忙的昏天黑地的,每天很少有时间写新博文,但每天看到博文的回复和排

深入分析Cocos2d-x 2.0中的“纹理” 另:本章所用Cocos2d-x版本为:

cocos2d-2.0-x-2.0.2 @ Aug 30 2012

/download

大家好,最近工作实在是太忙了,公司项目这个月要进行对外测试,大伙都是忙的昏天黑地的,每天很少有时间写新博文,但每天看到博文的回复和排名,心中很是感谢,正是因为各位的支持才能让我保持旺盛的战斗力。当然,在此还要感谢一下亲爱的老婆大人对我的支持,小乖每天闹困时主动的哄小乖安睡,否则咱咋能有时间写这些文字,小乖一岁半了,长得非常可爱

了人生中最幸福的东西。 ,虽然在京仍然漂着,仍然买不起房,仍然只是一个程序员,但是我知道我已经得到

好了,感叹之后,今天我们来学习Cocos2d-x中的“纹理”。之前有几篇文章都是谈及图片方面的,也是我刻意的安排:

(1)。如何利用Cocos2d-x开发一款游戏?(2)。游戏开发之图片元素。(3)。Cocos2d-x中图字原理之深入分析。(4)。红孩儿纹理打包器。(5)。CCImage深入分析。(6)。词典类CCDictionary深入分析。

在第一篇里我首先提到了“图元素的管理工具”。这是为什么呢?因为2D游戏画面是由图片构成的。了解好图片从美术绘制到加载到游戏以及使用和释放的整个过程是非常重要的,他关系着游戏的运行效率,内存占用等重要关键问题。有一个好的方案指导工作流程对于项目的成功是一项重要的保证。所以,请各位好好管理你们的图片资源。在第2篇里对于图片拼合的用途和意义做了启蒙。第3篇里我们深入了解了写汉字时Cocos2d-x是怎么使用图片来进行绘制的,它里面CCTextureAtlas和CCSpriteBatchNode 两个类告诉我们图片拼合原理与实现。而第4篇介绍了我开发的一款图片拼合工具。随后我会更新为最新版提供给大家使用。新增了PLIST方式导出和自动进行边缘空白裁剪的功能,免费而更强大!欢迎大家到下载。而后面两篇,其实是为了引出今天的文章而做的铺垫。

本博为什么要花这么多时间在纹理上呢?因为本博一次再一次的看到很多的Cocos2d开发者在说:“为什么我的游戏占内存这么大?”。“为什么我的游戏跑起来效率这么低?”。其实这里面最根本的问题是你思想上没有对资源进行优化的一种流程在里面。在进行游戏开发的过程中,你被美术牵着鼻子跑,你没有自然而然的想到该怎么进行图片的格式,尺寸,拼合,复用方式,以及绘制时的方式。这些因素对游戏产生的具体影响在你的脑子里还没有留下完整的概念。所以,我希望经过对于这些源码的分析,让大家去了解这些因素,从而学会思考如何优化自已的游戏。好了,大家先将今天关于纹理代码的分析博文学习完,下一篇我讲对于这些优化因素做一个具体的讲解。

当一张图片被加载到内存后,它是以纹理的形式存在的。纹理是什么东西呢?纹理就是一块内存,这块内存中存放的是按照指定的像素格式填充的图片像素信息。它被最终作为三角面着色所依据的数据源。

我们来看一下cocos2d-x中的libcocos2d

库,其下有许多目录,找到textures展开,可以看到有

CCTexture2D,CCTextureAtlas,CCTextureCache,CCTexturePVR四个类。

这四个类的功能分别是:

CCTexture2D: 纹理,即图片加载入内存后供CPU和GPU操作的贴图对象。

CCTexturePVR:处理PVR文件生成纹理的类,提示: 大家可以用它解析愤怒的小鸟中的图片。

CCTextureCache:纹理管理器,负责加载图片并对生成的纹理进行管理。通过“字典”来进行快速的查询。

CCTextureAtlas:纹理块管理器,如果图片是由多个小图块组成的,则纹理块管理器用来存储这些小图块的相关信息,以方便绘制相应图块。

为了让大家更好的学习纹理,在讲解纹理的代码之前我已经先给大家分析了本章用到的两个功能类:

CCImage和CCDictionary。这两个类分别在纹理模块中担任加载图片和管理纹理指针的作用。希望大家先顶一下这两篇贴子之后再开始下面的代码学习,你一定会感到非常容易。

一.CCTexture2D:

好,咱们现在开始看CCTexture2D:

[cpp] view plaincopy

26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.

//8 位色,只存灰度或者强度值,做灰度图用 kCCTexture2DPixelFormat_I8, //16 位色,只存 ALPHA 值与强度值,双功能 kCCTexture2DPixelFormat_AI88, //16 位色,RGBA 四通道各占 4 位。 kCCTexture2DPixelFormat_RGBA4444, //16 位色,RGB 三通道各占 5 位,多 1 位留做 ALPHA 镂空使用 kCCTexture2DPixelFormat_RGB5A1, // PVR 的 PVRTC4 压缩格式 kCCTexture2DPixelFormat_PVRTC4, // PVRTC 的 PVRTC2 压缩格式 kCCTexture2DPixelFormat_PVRTC2,

//默认格式 RGBA8888 kCCTexture2DPixelFormat_Default = kCCTexture2DPixelFormat_RGBA8888,

// 为了兼容性而保留的枚举值 kTexture2DPixelFormat_RGBA8888 = kCCTexture2DPixelFormat_RGBA8888, kTexture2DPixelFormat_RGB888 = kCCTexture2DPixelFormat_RGB888, kTexture2DPixelFormat_RGB565 = kCCTexture2DPixelFormat_RGB565, kTexture2DPixelFormat_A8 = kCCTexture2DPixelFormat_A8, kTexture2DPixelFormat_RGBA4444 = kCCTexture2DPixelFormat_RGBA4444, kTexture2DPixelFormat_RGB5A1 = kCCTexture2DPixelFormat_RGB5A1, kTexture2DPixelFormat_Default = kCCTexture2DPixelFormat_Default

} CCTexture2DPixelFormat;

//需要使用 Shader 代码片段,这里声明一下 class CCGLProgram;

//定义了纹理的一些参数 typedef struct _ccTexParams { GLuint GLuint GLuint GLuint } ccTexParams; minFilter;//纹理过滤器:缩小过滤器 magFilter;//纹理过滤器:放大过滤器 wrapS;//横向纹理寻址模式 wrapT;//纵向纹理寻址模式

// CCTexture2D 类可以方便的从图片,文本或 raw 数据文件中创建 OpenGL 所用贴图,创建的贴图会自动转为 2 的幂次方大小,所以要注意对于贴图坐标的 影响。

66. 67. 68. 69. class CC_DLL CCTexture2D : public CCObject { public:

70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.

//构造 CCTexture2D(); //析构 virtual ~CCTexture2D(); //取得纹理的描述 const char* description(void);

//释放数据 void releaseData(void *data); //保存数据 void* keepData(void *data, unsigned int length);

//由数据指针和指定的像素格式,图片宽高,来生成 OpenGL 贴图。 bool initWithData(const void* data, CCTexture2DPixelFormat pixelFormat, unsigned int pixelsWide, unsigned int pixelsHigh, const CCSize& contentSize);

84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. //由一个字符串生成 OpenGL 贴图。 bool initWithString(const char *text, const CCSize& dimensions, CCTextAlignment hAlignment, CCVerticalTextAlignment vAlig nment, const char *fontName, float fontSize); 95. 96. 97. 98. 99. 100. 101. t); 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. //设置为抗锯齿的贴图过滤方式(线性过滤) void setAntiAliasTexParameters(); //设置贴图参数 void setTexParameters(ccTexParams* texPa …… 此处隐藏:4494字,全部文档内容请下载后查看。喜欢就下载吧 ……

深入分析Cocos2d-x 2.0中的“纹理”.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/111599.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)