美文网首页cocos2dcocos2d-Lua
关于cocos3.x getTextureForKey的那些事

关于cocos3.x getTextureForKey的那些事

作者: 人气小哥 | 来源:发表于2017-07-09 00:08 被阅读31次

这个函数 我在看3.10的display框架的时候发现的
一直不知道有什么作用,本着曾国藩上页不读完不读下页,一本书不读完不读下本的精神
决定追本溯源

以下就是我发现的代码

local fileUtils = cc.FileUtils:getInstance()
function display.getImage(imageFilename)
    local fullpath = fileUtils:fullPathForFilename(imageFilename)
    return textureCache:getTextureForKey(fullpath)
end

前面的都很好理解 什么fileUtils 文件类 textureCache其实是个
cc.Director:getInstance():getTextureCache()

getTextureForKey是什么呢
起先我以为是获得一张图片纹理 然后设置到精灵里面去
后来发现并不是我想的那样

目前我发现了这个函数有3个作用

判断你的plist png 纹理是否加载到内存里面了

    cc.SpriteFrameCache:getInstance():addSpriteFrames("filpCardAllSpr.plist", "filpCardAllSpr.png")

    local fileUtils = cc.FileUtils:getInstance()
    local fullpath = fileUtils:fullPathForFilename("filpCardAllSpr.png")
    local texture = cc.Director:getInstance():getTextureCache():getTextureForKey(fullpath)
    dump(texture, "tex = ")

输出
"tex = " = userdata: 0x0a78e858
如果没有addSpriteFrames
"tex = " = nil

之后在C++源码里面搜getTextureForKey
发现还有另外2个用法

    dump(texture:getPixelFormat(), "pixel format: ")
    dump(texture:hasPremultipliedAlpha(), "premultiplied alpha: ")

输出

"pixel format: " = 2
"premultiplied alpha: " = true

那么 这2个函数又是干什么的呢
texture:getPixelFormat 给出的翻译是

取得当前纹理的贴图像素格式。

参考网页:http://www.cnblogs.com/sevenyuan/archive/2013/07/17/3195798.html

texture:hasPremultipliedAlpha()给出的翻译是

是否有ALPHA渐变值

参考网页:同上
参考网页AE中的通道预乘:http://www.cgspread.com/7677.html

"pixel format: " = 2
那这个2又对应的是什么呢
发现是对应RGBA8888的
这样就可以判断纹理的格式了

cc.TEXTURE2_D_PIXEL_FORMAT_AUTO = 0x0
cc.TEXTURE2_D_PIXEL_FORMAT_BGR_A8888 = 0x1
cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A8888 = 0x2
cc.TEXTURE2_D_PIXEL_FORMAT_RG_B888    = 0x3
cc.TEXTURE2_D_PIXEL_FORMAT_RG_B565   = 0x4
cc.TEXTURE2_D_PIXEL_FORMAT_A8        = 0x5
cc.TEXTURE2_D_PIXEL_FORMAT_I8        = 0x6
cc.TEXTURE2_D_PIXEL_FORMAT_A_I88     = 0x7
cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A4444     = 0x8
cc.TEXTURE2_D_PIXEL_FORMAT_RGB5_A1       = 0x9
cc.TEXTURE2_D_PIXEL_FORMAT_PVRTC4        = 0xa
cc.TEXTURE2_D_PIXEL_FORMAT_PVRTC4A       = 0xb
cc.TEXTURE2_D_PIXEL_FORMAT_PVRTC2        = 0xc
cc.TEXTURE2_D_PIXEL_FORMAT_PVRTC2A       = 0xd
cc.TEXTURE2_D_PIXEL_FORMAT_ETC           = 0xe
cc.TEXTURE2_D_PIXEL_FORMAT_S3TC_DXT1     = 0xf
cc.TEXTURE2_D_PIXEL_FORMAT_S3TC_DXT3     = 0x10
cc.TEXTURE2_D_PIXEL_FORMAT_S3TC_DXT5     = 0x11
cc.TEXTURE2_D_PIXEL_FORMAT_DEFAULT       = 0x0

2017年7月10日21:46:50
新发现一个用法 那就是 不用plist 创建一张大图中的一部分作为纹理

local BugSprite = class("BugSprite", function(imageFilename)
    local texture = display.getImage(imageFilename)
    local frameWidth = texture:getPixelsWide() / 3
    local frameHeight = texture:getPixelsHigh()

    local spriteFrame = display.newSpriteFrame(texture, cc.rect(0, 0, frameWidth, frameHeight))
    local sprite = display.newSprite(spriteFrame)
    sprite.animationName_ = imageFilename
    sprite.frameWidth_ = frameWidth
    sprite.frameHeight_ = frameHeight
    return sprite
end)

相关文章

  • 关于cocos3.x getTextureForKey的那些事

    这个函数 我在看3.10的display框架的时候发现的一直不知道有什么作用,本着曾国藩上页不读完不读下页,一本书...

  • 那些关于“关于”的事

  • 关于if的那些事

    if 语句可能执行可能不执行,只需要满足条件多重if语句即else if 语句 可能执行也可能不执行,只需要满足...

  • 关于那些事

    现在的我们还年轻,并不知道未来的事情,也许偶尔也会感叹时间的无情,回过头来,你还是依旧去努力,一只说后悔,一直在努...

  • 关于「那些事」

    文|简哓单 关于你,我不想多提,可是又不太愿意,你就这样悄然离去,无声的夜,将那背影拉的异常清冷。可我,却...

  • 关于那些事

    我喜欢的那些,好吧!我承认除了对生活中的事、人还算坚定;对于其它的,我好像就稍微会有些易变;当然啦,这算花心吗?...

  • 关于那些事

    自从《明朝那些事》流行以后,“那些事”文体日益盛行,其类似散文、潇洒自如、无拘无束的书写风格受到万千写手的喜欢,我...

  • 关于那些事

    我似乎明白一点的是,大学里不谈恋爱的不一定是长的不好看,也不一定是没人爱,我是那众多人里的一员,我想了很久其实...

  • 关于那些事

    这个世界很有趣,需要用文字记录一下 想起自己本身就是一个不好的人,就觉得我自己怎么可以干出这样的事? 可能我自私自...

  • 关于您

    关于您的一切,是我今生最美的记忆。 关于您的那些事,我还记着。关于那些年,那个夏天,那些事,是我记忆最美的时光...

网友评论

    本文标题:关于cocos3.x getTextureForKey的那些事

    本文链接:https://www.haomeiwen.com/subject/wezjhxtx.html