cocos不能newcomponent

cocos不能newcomponent,第1张

新建如图样式demo

在这里插入图片描述

编写如下代码

![在这里插入图片描述](https://img-blog.csdnimg.cn/a8a15f99af5c4a168e44c4cf8f7ec5a0.png在这里插入图片描述

将脚本挂载与Canvas节点

在这里插入图片描述

将按钮节点绑定事件

在这里插入图片描述

最终得出如下结果

在这里插入图片描述

可以看到,我们更换组件(component)时会出现无法成功加载图片。

但经过我们输出节点信息,发现组件是已经设置成功的

在这里插入图片描述

在这里插入图片描述

所以大胆猜测如果添加的节点 sprite 是当前帧处理,而处理节点纹理(图片)是下一帧才会进行渲染,这里很可能会误认为删除组件无效或者添加组件无效,当我们延迟加载一帧,就可以成功

导读:   ccc 我们在使用一张图片的时候,使用cc.laod api ,回调传回来cc.spriteFrame 或者cc.texture来供我们使用。下面的内容会解密中间到底经历了哪些过程(native)。

加载:首先会在js引擎中,通过一些方式得到资源的完整信息,包括资源的完整路径资源类型等(可以了解下load的加载过程)。

然后调用jsb_global_load_image方法,利用native来加载这张图片到内存中,拿到内存首地址和内存大小。

把刚才拿到的信息转为jsObject,内存地址和大小会被描述成arrayBuff,包装好的对象回调回给js。

js引擎拿到回调后会创建一个texture来,然后调用 texture.initWithElement()方法,把之前包装好的数据再传回给native的texture对象(js的texture利用jsb来管理native的texture对象,并且是1对1的)。

渲染:native的texture接收到数据后会用OpenGL的api来开辟显存,绑定纹理数据(分配一个纹理id给native的texture)。然后通过device(DeviceGraphics是单例,大多数的OpenGL api接口都是通过他调用)渲染到屏幕上。(OpenGL api可自行查找资料)

我们在js端让一个精灵显示图片的时候,是在load的回调里 把cc.spriteFrame给精灵使用,spriteFrame里持有cc.texture对象,cc.texture又持有由native返回的数据。通过这种方式让纹理数据和将要渲染的对象绑定起来。

还有许多包括顶点数据  node的位置 大小 shader 等等 都在RenderFlow等类中获取和封装(比较复杂),最后配合纹理数据 渲染出来。我们加载的一张图片就这样渲染到了屏幕上。

流程图:

cocos在游戏界面一段时间后显示图片的方法非常简单,首先在cocos内对软件进行设置,然后再在游戏内设置,然后导入图片,就能显示图片了。

步骤就是首先创建背景,然后创建节点渲染节点,点击sprite精灵,然后创建进度条,再导入图片,就可以显示了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11499429.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存