cocos creator最新版本2.1.0用SpriteFrame加载图片必现异常问题。

  • Creator 版本:2.1.0

  • 目标平台: Web

  • 详细报错信息,包含调用堆栈:

  • 重现方式:new SpriteFrame(cc.url.raw(“resources/tmp.png”));直接抛出异常:texture-util.js:48 Uncaught TypeError: tex.once is not a function
    at Object.loadImage (texture-util.js:48)
    at cc_SpriteFrame._loadTexture (CCSpriteFrame.js:455)
    at cc_SpriteFrame.setTexture (CCSpriteFrame.js:444)
    at cc_SpriteFrame.ctor (CCSpriteFrame.js:225)
    at new cc_SpriteFrame (eval at _createCtor (CCClass.js:609), :9:7)
    at Object.getCurSkin (HangoverSkin.js:23)
    at Object.init (HangoverParticle.js:16)
    at hexagonMove.onLoad (hexagonMove.js:22)
    at CCClass.eval [as _invoke] (eval at createInvokeImpl (component-scheduler.js:256), :3:65)
    at CCClass.invoke (component-scheduler.js:154)

  • 之前哪个版本是正常的 :我用过的cocos creator之前版本都没正常过。

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :Windows

  • 编辑器之前是否有其它报错 :

  • 出现概率:100%

  • 额外线索:
    希望官方尽快修复。

没人回复吗?

1赞

有可能是代码的问题,能否看截图看一下你创建图片代码??

解决了,贴下代码,避免后来人再遇到。

cc.loader.loadRes('pic/world', cc.SpriteFrame, function (err, spriteFrame) {
    console.log(spriteFrame);
    this.node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
}.bind(this));

这里要特别注意一下,扩展名和路径是最最容易出现问题的地方,之前我就是在这里出的问题,好了,我去面壁了。

用cc.loader.loadRes方法加载图片的方式我知道,但我的问题是通过new SpriteFrame(cc.url.raw(“resources/tmp.png”));这种方式加载图片就会报错。

我加载图片的方法是通过这种方式:new SpriteFrame(cc.url.raw(“resources/tmp.png”));
四楼说的是用cc.loader.loadRes的方法加载,和我反馈的问题不一样。希望官方团队能回答下。

报了什么错误?还有你转换后的 url 是什么样子的?要给一下详细的信息

额,报的错误帖子上不是附带了截图吗?也把错误以文本形式粘贴在帖子上了,我这里再发下错误吧:Uncaught TypeError: tex.once is not a function
at Object.loadImage (texture-util.js:48)
at cc_SpriteFrame._loadTexture (CCSpriteFrame.js:455)
at cc_SpriteFrame.setTexture (CCSpriteFrame.js:444)
at cc_SpriteFrame.ctor (CCSpriteFrame.js:225)
at new cc_SpriteFrame (eval at _createCtor (CCClass.js:609), :9:7)
at Object.getCurSkin (HangoverSkin.js:23)
at Object.init (HangoverParticle.js:16)
at hexagonMove.onLoad (hexagonMove.js:22)
at CCClass.eval [as _invoke] (eval at createInvokeImpl (component-scheduler.js:256), :3:65)
at CCClass.invoke (component-scheduler.js:154)
错误最终定位到:tex.once is not a function,至于是不是图片url路径问题,您可以用类似我的这种方式实验下:new SpriteFrame(cc.url.raw(“resources/tmp.png”));这里我写的图片路径您可以替换为你测试项目下的。

额。。好吧,没注意看前面的,我用 2.1 测,是正常的

刚我再测试了下,原来这个问题只有在相对于resources目录下的二级目录下的图片资源加载才会报这种错,比如您在resources目录下新建一个文件夹(假设命名为test),然后把图片资源tmp.png放到test文件夹下,然后通过new SpriteFrame(cc.url.raw(“resources/test/tmp.png”));去加载,这样必现我提的问题。希望您能再次测试下,刚问题没有描述没到位,坐等您的回答。

还是正常的。。。

绝望了,我这边还是有问题:persevere:

不行的话,发 demo 给我,我帮你测试看看

···
new SpriteFrame(cc.url.raw(“resources/tmp.png”));
···
这种方法报错 你解决了吗? 改成回调的方式代码太多了。不想改

1.8以后只能用cc.loader.loadres这一种方式加载资源,其他方式都会莫名其妙的报错,各种找不到资源,我严重怀疑官方大佬平时只用这一种方法

1赞

这个问题的原因在于,路径加不加resources这里,把resources去掉就行了,因为我就是这么解决的。附上图片

想尽快知道一个答案:
我用的是cocos creator2.0.8版本,测试出现这种情况:
在“属性检查器”面板勾选场景的“延迟加载资源”选项后,我有一些"预制体"资源(这些预制体资源上挂载了cc.Animation组件,组件上挂载了cc.AnimationClip动画帧资源)会通过cc.instantiate接口添加到这个场景,但我的“预制体”资源并没有勾选资源延迟加载,但在测试环境里运行时发现预制体被加载后动画资源是延迟加载的,导致第一次播放动画的时候都看不到画面,直到第二次播放时才正常。
还有就是,我尝试在这些预制体上挂载的脚本文件里的properties属性里挂载cc.AnimationClip资源,但很明显这些挂载动画资源也是延迟加载的。
场景勾选了“延迟加载资源”后,添加在场景上的“预制体”资源的“延迟加载资源”选项就没有了吗?还是这其实是个bug。
坐等回复。

mark,同问

我也遇到了这个情况 所有动态播放时都会闪烁 延迟加载场景造成的 请问有什么处理方式吗

闪烁的问题解决了吗,我也遇到了,很紧急