zoukankan      html  css  js  c++  java
  • 15、Cocos2dx 3.0游戏开发找小三之Sprite:每一个精灵都是上辈子折翼的天使

    重开发人员的劳动成果,转载的时候请务必注明出处http://blog.csdn.net/haomengzhu/article/details/30475395

    Sprite 
    Sprite 能够说是游戏中最重要的组成元素;
    它描写叙述了游戏中的精灵。是 Node 的一个最重要也最灵活的子类。
    Sprite 非常重要。它代表了游戏中一个最小的可见单位。
    同一时候Sprite 也非常灵活。它装载了一个平面纹理。具有丰富的表现力,并且 能够通过多种方式载入。
    假设说 Scene 和 Layer 代表了宏观的游戏元素管理,那么 Sprite 则为微观世界提供了丰富灵活的细节表现。


    纹理
    纹理就是一张图片。这张图片被精灵显示出来。纹理是3D游戏中绘制到物体表面上的图案;
    Cocos2d-x使用了 3D 画图库 OpenGL。
    这样一来,我们既能够利用图形加速器提高画图效率,也能够在游戏中增加 3D 变换特效,实现更绚丽的效果。
    为了在 3D 环境中绘制平面图形,Cocos2d-x 仅仅需在 3D 空间中垂直于视线的平面上绘制矩形,在矩形的表面使用纹理贴图就可以。

    创建小天使
    游戏开发应用中,精灵是由一个纹理创建的;假设不正确精灵做不论什么设置。精灵就是显示在屏幕上的一张图片。

    通常精灵被置于层中,因此我们首选在层的初始化方法中创建精灵。设置属性。并加入到层中。
    最经常使用的创建精灵的方式 是:使用一个图片文件通过使用 Sprite 的工厂方法 create 来创建精灵;
    auto bg= Sprite::create("bg.png");
    这个工厂方法包括一个std::string字符串參数,表示精灵所用纹理的文件名称。

    Sprite 会自己主动把图片作为纹理加载到游戏中,然后使用纹理初始化精灵。

     

    精灵不但能够显示一个完整的纹理,也能够仅显示纹理的一部分。
    通过Sprite* Sprite::create(const std::string& filename, const Rect& rect)就能够达到目的。

    以下的代码使用两个參数的 create 工厂方法创建了一个精灵:
    这个精灵使用"bg.png"作为纹理,可是仅显示纹理左上角 100×100 像素大小的部分:
    auto bg2= CCSprite::create("bg.png", Rect(0, 0, 100, 100));
    第一个參数是所使用纹理的文件名称。第二个參数是一个Rect 类型的结构体,表示纹理中显示出来的矩形部分。
    Rect(x,y,width,height)用来方便地创建一个矩形。
    须要注意的是,纹理的坐标系中原点(0,0)位于左上角,原点向右是 x 轴的正方向。原点向下是 y 轴的正方向。

    坐标系统以后再具体描写叙述;

    给小天使穿衣服
    创建了精灵后。我们还须要把精灵安排在合适的位置,否则引擎也不能决定精灵将怎样呈现出来。
    诸如精灵的位置、方向、缩放比例等參数都是精灵的属性,我们在层中加入精灵之前,须要对它们进行恰当地设置。
    以下的代码首先获取屏幕大小。然后依据屏幕大小把精灵置于屏幕中央:
    Size size = Director::getInstance()->getWinSize();
    Point pos = Point(size.width / 2, size.height / 2);
    bg->setPosition(pos); 
    我们能够看到。在这段代码中我们改动了精灵的 Position 属性。

    Position 属性是一个 Point 类型的结构体。表示精灵在 层中的位置,它是精灵相对于层的坐标。

    把精灵的位 置坐标设置为屏幕长宽的一半。就能够使精灵位于屏幕中央了。

     


    精灵具有十分丰富的属性,我们能够利用这些属性让精灵灵活地呈现出来。
    但实际上。这些属性不不过精灵才拥有的,同一时候也属于Node。

    Sprite 继承自 CCNode。因而也继承了它的所有属性。


    天使来到了人间
    社置完精灵的属性后,就该把精灵加入到层中了。

    实际上 Sprite 与 Layer 都继承自 CCNode,向一个游戏元素中加入其他游戏元素的 addChild 是 Node 包括的方法。因此我们全然能够如同向场景中加入层一样,把精灵加入到层中;
    this->addChild(bg);

    其它经常使用成员
    Sprite 还拥有下面经常使用的成员:
    1、初始化方法
    CCSprite 拥有很多种不同的初始化方法,能够方便地创建精灵。

    使用这些方法。我们不仅能够通过图片文件来创建精灵,还能够直接使用纹理或精灵框帧来创建精灵。

    a、使用图片文件
    static Sprite* create(const std::string& filename);
    static Sprite* create(const std::string& filename, const Rect& rect);
    当中 filename为图片的文件名称,直接传入图片文件相对于"Resource"目录的路径就可以;
    rect 为可选參数,用于指定精灵显示纹理的部分。它使用前面介绍的纹理坐标系。

    b、使用 Texture2D
    static Sprite* createWithTexture(Texture2D *texture);
    static Sprite* createWithTexture(Texture2D *texture, const Rect& rect, bool rotated=false);
    Texture2D 类型的 texture參数为纹理对象,能够使用 TextureCache 类的 addImage 方法把图片文件装载为纹理并返回。而 rect 与使用图片文件创建精灵的 rect 參数同样。
    c、使用 SpriteFrame 创建
    static Sprite* createWithSpriteFrame(SpriteFrame *spriteFrame);
    static Sprite* createWithSpriteFrameName(const std::string& spriteFrameName);
    SpriteFrame 类型的 spriteFrame參数为纹理框帧。SpriteFrame 保存了一个 Texture2D 的引用与一个 Rect 来表
    示纹理中的一部分。使用 SpriteFrame 初始化精灵时,也可使精灵显示部分纹理。

    2、纹理相关的属性
    Sprite 提供了下面与纹理相关的属性,用于获取或设置精灵内容。

    Texture2D* _texture:获取或设置精灵所用的纹理。

    使用此方法设置纹理后,精灵将会显示一个完整的纹理。

    Rect _rect:获取或设置纹理显示部分。此 Rect 採用纹理坐标。即左上角为原点。
    SpriteBatchNode* _batchNode:获取或设置精灵所属的批节点。


    3、纹理相关的方法
    Sprite 提供了下面与纹理相关的方法。
    virtual void setSpriteFrame(SpriteFrame* newFrame):设置显示中的纹理框帧,
    当中 newFrame为新的纹理框帧,其代表的纹理或纹理的显示部分都能够与旧的框帧不同。 
    virtual SpriteFrame* getSpriteFrame() const:获取正在显示的纹理框帧。
    virtual bool isFrameDisplayed(SpriteFrame *pFrame) const:返回一个值。表示pFrame是否是正在显示中的纹理框帧。

    4、颜色相关的属性
    Sprite 提供了下面与颜色相关的属性:
    Color3B color:获取或设置叠加在精灵上的颜色。Color3B 由三个颜色分量(红色、绿色和蓝色分量)组成。默觉得纯白色,表示不改变精灵的颜色,假设设置为其它值。则会改变精灵的颜色。
    GLubyte Opacity:获取或设置精灵的不透明度。GLubyte 为 OpenGL 的内置类型,表示一个无符号 8 位整数,取值范围从最小值 0 到最大值 255。

    bool isOpacityModifyRGB:获取或设置精灵所使用的纹理数据是否已经预乘 Alpha 通道。当包括 Alpha 通道的图片显示错误时,能够尝试改动这个属性。

    郝萌主友情提示:
    守护精灵,守护属于你的天使、、、

  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5261728.html
Copyright © 2011-2022 走看看