cocos2dx-lua v3 -sprit 精灵详解

来源:互联网 发布:社交网络 种子 编辑:程序博客网 时间:2024/04/30 20:17

尊重版权:文章转载自,http://www.2cto.com/kf/201505/398833.html  仅为个人使用。

精灵类是Sprite,它的类图如下图所示。


/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对象使用,这个实例如下图所示,其中地面上的草是放在背景(如图所示)中的,场景中的两棵树是从图所示的“树”纹理图片中截取出来的,如图所示是树的纹理坐标,注意它的坐标原点在左上角。

/创建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))是设置纹理的裁剪区域。

改变sprite精灵图片用到的方法:

首先,创建一个精灵 ,方法上面已经有了,这里随便选取一个简单的方法 

local tree1 = cc.Sprite:create("res/tree1.png")

self:addChild(tree1)

local sprite_frame_cache = cc.SpriteFrameCache:getInstance()

local texture_cache = cc.Director:getInstance():getTextureCache()

方法一:

local frame = sprite_frame_cache:getSpriteFrame("tree2.png") --tree2.png为大图缓存中的精灵帧名

if frame then 
                tree1:setSpriteFrame(frame)

end

方法二:

local frame = cc.SpriteFrame:create("res/tree2.png",cc.rect(0,0,100,100)) --直接创建一个精灵帧

tree1:setSpriteFrame(frame)

方法三:

tree1:setTexture("res/tree2.png") --直接改变纹理

方法四:

local cache =texture_cache:addImage("res/tree2.png")

tree1:setTexture(cache) --用cc.texture2d类型改变纹理

最后释放纹理缓存

sprite_frame_cache:removeUnusedSpriteFrames()
    texture_cache:removeUnusedTextures()

0 0
原创粉丝点击