113
技術社區[雲棲]
實例:使用紋理對象創建Sprite對象
精靈類是Sprite,它的類圖如下圖所示:
Sprite類直接繼承了Node類,具有Node基本特征。此外,我們還可以看到Sprite類的派生類有:PhysicsSprite和Skin。PhysicsSprite是物理引擎精靈類,Skin是皮膚精靈類用於骨骼動畫。
使用紋理Texture2D對象創建Sprite對象是使用createWithTexture函數實現的。我們會通過一個實例介紹紋理對象創建Sprite對象使用,這個實例如下麵第一張圖所示,其中地麵上的草是放在背景中的,場景中的兩棵樹是從“樹”紋理圖片中截取出來的,最後一張圖所示的是樹的紋理坐標,注意它的坐標原點在左上角。
創建Sprite對象實例
場景背景圖片
“樹”紋理圖片
樹”紋理圖片
HelloWorldScene.cpp實現的init函數代碼如下:
bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Point origin = Director::getInstance()->getVisibleOrigin(); autobackground = Sprite::create("background.png"); ① background->setAnchorPoint(Point::ZERO); ② this->addChild(background,0); auto tree1 = Sprite::create("tree1.png",Rect(604, 38, 302,295)); ③ tree1->setPosition(Point(200,230)); this->addChild(tree1,0); Texture2D* cache = TextureCache::getInstance()->addImage("tree1.png"); ④ auto tree2 = Sprite::create(); ⑤ tree2->setTexture(cache); ⑥ tree2->setTextureRect(Rect(73, 72,182,270)); ⑦ tree2->setPosition(Point(500,200)); this->addChild(tree2,0); return true; }
在上麵代碼第①行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))是設置紋理的裁剪區域。
最後更新:2017-04-03 12:56:43