精靈類是Sprite,它的類圖如下圖所示。

Sprite類直接繼承了Node類,具有Node基本特征。此外,我們還可以看到Sprite類的子類有:PhysicsSprite和Skin。PhysicsSprite是物理引擎精靈類,Skin是皮膚精靈類用於骨骼動畫。
創建Sprite精靈對象
創建精靈對象有多種方式,其中常用的函數如下:
cc.Sprite:create ()。創建一個精靈對象,紋理[ 紋理(texture),表示物體表面細節的一幅或幾幅二維圖形,也稱紋理貼圖,當把紋理按照特定的方式映射到物體表面上的時候能使精靈看上去更加真實。 ]等屬性需要在創建后設置。
cc.Sprite:create (filename)。指定圖片創建精靈。
cc.Sprite:create (filename, rect)。指定圖片和裁剪的矩形區域來創建精靈。
cc.Sprite:createWithTexture (texture)。指定紋理創建精靈。
cc.Sprite:createWithTexture(texture, rect, rotated=false)。指定紋理和裁剪的矩形區域來創建精靈,第三個參數是否旋轉紋理,默認不旋轉。
cc.Sprite:createWithSpriteFrame(pSpriteFrame)。通過一個精靈幀對象創建另一個精靈對象。
cc.Sprite:createWithSpriteFrameName (spriteFrameName)。通過指定幀緩存中精靈幀名創建精靈對象。
上述create函數我們在前面章節中介紹過,而且create函數比較簡單,我們就不再介紹了。
實例:使用紋理對象創建Sprite對象
使用紋理Texture2D對象創建Sprite對象是使用createWithTexture函數實現的。本節我們會通過一個實例介紹紋理對象創建Sprite對象使用,這個實例如下圖所示,其中地面上的草是放在背景(如圖所示)中的,場景中的兩棵樹是從圖所示的“樹”紋理圖片中截取出來的,如圖所示是樹的紋理坐標,注意它的坐標原點在左上角。




HelloWorldScene.cpp實現的createLayer函數代碼如下:
- function GameScene:createLayer()
- local layer = cc.Layer:create()
- local bg = cc.Sprite:create("background.png") ①
- bg:setPosition(cc.p(size.width/2, size.height/2)) ②
- layer:addChild(bg)
- local tree1 = cc.Sprite:create("tree1.png",cc.rect(604, 38, 302, 295)) ③
- tree1:setPosition(cc.p(200,230))
- layer:addChild(tree1,0)
- local cache = cc.Director:getInstance():getTextureCache():addImage("tree1.png") ④
- local tree2 = cc.Sprite:create() ⑤
- tree2:setTexture(cache) ⑥
- tree2:setTextureRect(cc.rect(73, 72,182,270)) ⑦
- tree2:setPosition(cc.p(500,200))
- layer:addChild(tree2,0)
- return layer
- end
在上面代碼第①行cc.Sprite:create("background.png")通過background.png圖片創建精靈,background.png圖片如前圖所示,第②行代碼是設置背景的位置。
第③行代碼cc.Sprite:create("tree1.png",cc.rect(604, 38, 302, 295))通過tree1.png圖片和矩形裁剪區域創建精靈,矩形裁剪區域為(604, 38, 302, 295),如圖所示。
rect類可以創建矩形裁剪區,rect構造函數如下:
cc.rect(x, y, width, height)
其中x,y是UI坐標,坐標原點在左上角,width是裁剪矩形的寬度,height是裁剪矩形的高度。
第④行代碼通過紋理緩存TextureCache創建紋理Texture2D對象,通過Director的getTextureCache()函數可以獲得TextureCache實例,TextureCache 的addImage("tree1.png")函數可以創建紋理Texture2D對象,其中的tree1.png是紋理圖片名。
第⑤行代碼創建一個空的Sprite對象,所以還要通過的后面的很多函數設置它的屬性,其中第⑥行代碼tree2:setTexture(cache)是設置紋理。第⑦行代碼tree2:setTextureRect(cc.rect(73, 72,182,270))是設置紋理的裁剪區域。