创建 Sprite 方式不同导致的 bug

当我创建“渲染节点-Sprite”时,这个节点的 Sprite 组件的 spriteFrame 是有 default_sprite 的,但是我创建一个空节点,再在这个空节点上添加 Sprite 组件时,这个 Sprite 组件的 spriteFrame 是没有 default_sprite 的。我也不知道自己说明白没有

这个不是 bug,你描述的:
第一种创建方式:快速创建(这个是我们已经做好了 Sprite 模版,点击 “渲染节点-Sprite” 时进行创建的)
第二种创建方式:是正常创建方式,并不会自动的去帮你设置 spriteFrame ,需要你自己去做

请问一下,如果我要在代码中拿到sprite默认的 spriteFrame ,应该怎么做 ?

不通过ccClass挂载的方式

通过sprite.spriteFrame就是你现在sprite里面的spriteFrame

你可能误解了我的意思,我不是要拿自己的sprite的spriteFrame,而是要拿到通过编辑器创建时,默认的 default_sprite_splash 这个 纯色图

一样的,sprite_splash一样是一个空节点挂1个精灵组件,精灵里面的图片是default_sprite_splash


只要拿到sprite_splash所在的node下的sprite,通过.spriteFrame一样可以拿到defalut_sprite_splash

我要的不是这个,谢谢。。。

你这样做的前提是 需要创建一个 纯色node。

我要的是 直接拿到默认的spriteFrame

这里面根本都没有纯色的node,你有颜色也是node加上sprite做的,node本来就是空的节点,sprite才有spriteFrame,你想直接做有色的node,除非引擎组有这个控件提供,你看下sprite控件里面的东西,你一创建出一个sprite,里面就是node包含名叫sprite的渲染组件,编辑器根本没提供名叫“sprite”这个组件,你创建的Sprite都是组合出来的

我知道你说的一切,我的意思是,我不想通过编辑器创建这个 默认添加了sprite组件的 node,然后在去获取这个node上的sprite组件的spriteFrame,我要的是能直接通过代码获取到这个 spriteFrame。 我的意思有那么难理解 吗 ?

你可以试试通过loadRes获取啊,打印图片的地址是这个
,不知道行不行,毕竟没试过这个

cc.loader.loadRes("url地址",cc.SpriteFrame,function(err,sp){
   var newNode = new cc.Node("newNode");
   var newSprite = newNode.addComponent(cc.Sprite);
   newSprite.spriteFrame = sp;
})

cc.loader.loadRes 我也知道,还有没有其他的办法??

你要的是什么方法?

如果加载资源的话,用代码实现只有:
1、动态加载 cc.loader
2、静态加载 在properties写好,在编辑器拖动进来

要不你自己本地放一个默认图,通过动态加载吧

本来defalut_sprite_splash就不是本地的资源

我不知道到底有没有API能直接拿到默认的spriteframe,如果没有的话,也只能通过 代码加载了

你要拿节点的spriteFrame 就是先拿到节点,获取Sprite组件,拿SpriteFrame属性

加载资源 跟 拿SpritFrame是两样东西,如果你已经获取到要的资源了,可以不用管我上面说的,直接

this.node.getComponent(cc.Sprite).spriteFrame = 你要的图片

如果你要代码创建引擎自带那个单色Sprite,你要问问引擎组了,default_sprite_splash 纯色图我没试过代码生成,我都是做成纯色预制体拿来用的

完全同意,如果真要拿default_sprite_splash,还不如自己放一张纯色图片,直接加载

我就是想省去这一步,如果不能,那就只能这么做了