CocosCreator + 动态获取和修改精灵纹理 简易教程

http://www.cocoachina.com/bbs/read.php?tid=458895&page=1&toread=1#tpc
New: 教程司令部已经更新了教程 往后不再使用链式的教程结构

假如我们有很多张图片

比如说这里演示的头像

我们想要动态在Assert上获取这些图片并且修改Sprite上的spriteFrame

那么可以这么做

我们先演示一下

原先的纹理是黄色头发的小女孩 修改纹理的脚本和精灵组件在一个节点上

然后我们运行一下

纹理已经替换了

那么我讲一下限制条件

第一 不能读plist图集

我这边出了点问题不能打包

我用另一个打包好的项目说一下

那么上面是之前打包后plist的目录 实际上只剩下了大图
小图的plist信息都成json文件了

而我们之前代码里面的
var realUrl = cc.url.raw(‘image/girl233.png’);
实际上是将CocosCreator项目里的目录映射到打包后项目的目录里
这个是console.log(‘realUrl’);的信息

那么动态获取RawAssert图片的过程我们大概就有底了
plist的小图在打包后的项目里根本就没有那张小图 只有大图
之后会测试能不能用cc.loader.loadJSON
不过目前用这用方法是不能读plist的小图的
只能拆开来

那么第二 一开始Sprite节点上必须要有一个default SpriteFrame
为什么呢
我们试一下SpriteFrame置空 然后console.log(this.getComponent(cc.Sprite));

我们就会发现找不到setTexture方法
为什么呢= =
我们将上面Sprite的信息展开

这就是为什么我们一开始要设置一个default SpriteFrame了
因为setTexture方式是从spriteFrame那边拿过来的
如果一开始没有纹理
就拿不到spirteFrame
也拿不到setTexture方法
也就换不了纹理了

那么 代码: http://pan.baidu.com/s/1o76dzv0,1

http://www.cocoachina.com/bbs/read.php?tid=458895&page=1&toread=1#tpc

http://www.cocoachina.com/bbs/read.php?tid=459999

1赞

实用 !接地气 !:2:

话说,有空编辑一下教程司令部啊,你的新教程都没加上去

:896::896:一直点下一篇就能找到啦

V0.7.1 测试只适应网页,其他环境不行。包括 cc.textureCache.addImage 加入回调方法

— Begin quote from ____

引用第4楼fly2012于2016-02-23 15:32发表的 :
V0.7.1 测试只适应网页,其他环境不行。包括 cc.textureCache.addImage 加入回调方法 http://www.cocoachina.com/bbs/job.php?action=topost&tid=459845&pid=1503347

— End quote

如果你使用 Cocos2d-x 最新版本的话应该是没有问题的,JSB 的 addImage 支持加载远程图片,你的 -x 版本是?

请问如果是合图要怎么写

支持,不错

这里很奇怪,完全看不懂。根据官方api文档spriteFrame继承自Asset,asset继承字rawasset,也就是说没有setexture()方法,这里的这个settexture方法是哪里来的?官方api中settexture只有TextureAtlas存在这个方法,有什么联系么?我把settexture修改为官方api中的_refreshTexture(texture)似乎也是生效的,效果有区别;这里面有什么关系么?感觉官方api很乱啊,看api基本上解决不了什么问题。。。。求解啊。

不知道以後會不會支援讀圖集?
像plist這種,這種常常用到的啊…

請問一下,如果是要更新一個Button(btn),但Canvas中還有另一個Button(Test),
而我使用的code如下:
http://pastie.org/10913940
結果卻是一次更改兩個Button,請問該如何解決?


已解決