cocos2d-x源码剖析之精灵对象

本文深入剖析cocos2d-x游戏引擎中的精灵对象,探讨CCTexture2D、CCSpriteFrame和CCSprite的内部结构及工作原理。讲解了纹理如何表示,包括OpenGL中的唯一标识符、纹理属性,以及如何通过顶点着色器和像素着色器进行绘制。此外,还介绍了CCSpriteFrame在动画表现形式中的作用,以及CCSpriteBatchNode如何优化渲染效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         在游戏中我们一个非常重要的元素就是图片,给最初的文字Mud游戏带来了多姿多彩。在3D游戏中,一个图片是采用什么结构表示的呢?其实灰常简单,你也能想得到:

 1张纹理图,2个三角面片。那接下来就让我们看看cocos2d-x.们带来什么惊喜不?

         游戏世界中的数据结构在我看来可以分为两种:一个是资源,另外一个是物理对象。是不是有点不好理解?资源就是一些原材料,比如纹理啊,声音啊,不能独立的作为实体存在。物理对象则是我们对游戏世界中真实存在的东西的一种抽象,资源必须依附在物理对象上。比如说一个精灵肯定拥有一张纹理。废话少说,进入我们的正题。

         先看看最重要的资源,纹理的表示。让我们仔细探究一下cocos2d-x中纹理是如何表示的

        CCTexture2D的结构

 class CC_DLL CCTexture2D : public CCObject
{
public:
    bool initWithData(const void* data, CCTexture2DPixelFormat pixelFormat, unsigned int pixelsWide, unsigned int pixelsHigh, const CCSize& contentSize);   //初始化纹理
   bool initWithImage(CCImage * uiImage);
    void drawAtPoint(const CCPoint& point);                                                               // 绘制
    void drawInRect(const CCRect& rect);
protected:
    CC_PROPERTY_READONLY(GLuint, m_uName, Name)                                  // 唯一的标示 
    CC_PROPERTY_READONLY(unsigned int, m_uPixelsWide, PixelsWide)
    CC_PROPERTY_READONLY(unsigned int, m_uPixelsHigh, PixelsHigh)
    CC_PROPERTY(GLfloat, m_fMaxS, MaxS)
    CC_PROPERTY(GLfloat, m_fMaxT, MaxT)
   CC_PROPERTY(CCGLProgram*, m_pShaderProgram, ShaderProgram);    // 渲染时使用的Shader
}      

    从上面的数据结构我们可以看到CCTexture2D还是蛮简单的,包含有:

   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值