實例:使用紋理對象建立Sprite對象

精靈類是Sprite,它的類圖以下圖所示:html


Sprite類直接繼承了Node類,具備Node基本特徵。此外,咱們還能夠看到Sprite類的派生類有:PhysicsSprite和Skin。PhysicsSprite是物理引擎精靈類,Skin是皮膚精靈類用於骨骼動畫。web

使用紋理Texture2D對象建立Sprite對象是使用createWithTexture函數實現的。咱們會經過一個實例介紹紋理對象建立Sprite對象使用,這個實例以下面第一張圖所示,其中地面上的草是放在背景中的,場景中的兩棵樹是從「樹」紋理圖片中截取出來的,最後一張圖所示的是樹的紋理座標,注意它的座標原點在左上角。設計模式

                                                  建立Sprite對象實例緩存

場景背景圖片函數

 「樹」紋理圖片
動畫

 

樹」紋理圖片
this


HelloWorldScene.cpp實現的init函數代碼以下:spa

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片.net

  1. bool HelloWorld::init()  設計

  2. {  

  3.    if ( !Layer::init() )  

  4.    {  

  5.        return false;  

  6.    }  

  7.      

  8.    Size visibleSize = Director::getInstance()->getVisibleSize();  

  9.    Point origin = Director::getInstance()->getVisibleOrigin();  

  10.    

  11.         autobackground = Sprite::create("background.png");                                                              ①  

  12.         background->setAnchorPoint(Point::ZERO);                                                                   ②  

  13.    this->addChild(background,0);  

  14.      

  15.    auto tree1 = Sprite::create("tree1.png",Rect(604, 38, 302,295));                                       ③  

  16.    tree1->setPosition(Point(200,230));                                                                                      

  17.    this->addChild(tree1,0);  

  18.      

  19.    Texture2D* cache = TextureCache::getInstance()->addImage("tree1.png");                   ④  

  20.    auto tree2 = Sprite::create();                                                                                                 ⑤  

  21.    tree2->setTexture(cache);                                                                                                     ⑥  

  22.    tree2->setTextureRect(Rect(73, 72,182,270));                                                                     ⑦  

  23.    tree2->setPosition(Point(500,200));                                                                                      

  24.    this->addChild(tree2,0);  

  25.    

  26.    return true;  

  27. }  


在上面代碼第①行Sprite::create("background.png")經過background.png圖片建立精靈,第②行代碼是設置背景的錨點。

第③行代碼Sprite::create("tree1.png",Rect(604, 38, 302, 295))經過tree1.png圖片和矩形裁剪區域建立精靈,矩形裁剪區域爲(604, 38, 302,295)。

Rect類能夠建立矩形裁剪區,Rect構造函數以下:

Rect (float x, float y, float width,float height)

其中x,y是UI座標,座標原點在左上角,width是裁剪矩形的寬度,height是裁剪矩形的高度。

第④行代碼經過紋理緩存TextureCache建立紋理Texture2D對象,TextureCache::getInstance()是採用單例設計模式,經過getInstance()函數能夠得到TextureCache實例,TextureCache 的addImage("tree1.png")函數能夠建立紋理Texture2D對象,其中的tree1.png是紋理圖片名。

第⑤行代碼建立一個空的Sprite對象,因此還要經過的後面的不少函數設置它的屬性,其中第⑥行代碼tree2->setTexture(cache)是設置紋理。第⑦行代碼tree2->setTextureRect(Rect(73, 72,182,270))是設置紋理的裁剪區域。

相關文章
相關標籤/搜索