接着昨天的文章,今天继续实现交互。
前一篇文章已经通过在节点上挂载脚本,然后从前端向插件框架发送消息,再转发至 cocos2dx
实现了,间接的视线了监听 场景编辑器
中节点创建的信息。
纹理获取
creator
中的各种资源都有自己的 uuid
用来作为唯一标识,很多插件相关的消息,传输的都是这样一个 uuid
,比如这里我所需要用到的 'scene:query-node'
:
这里我并没有直接从前端将所用纹理的信息发送到插件,只是想试一下是否可以在插件一端来主动获取到。所以只是简单的将 node
的 uuid
发送到了插件。
通过查阅一些文档,在插件中,可以根据 uuid
来查询到 node
信息:
Editor.Ipc.sendToPanel('scene', 'scene:query-node', uuid, function(event, data) {}
可以看到其中的信息还是非常全的。
但是在进行详细查看后,并没有从中发现节点挂载的 Sprite
组件所使用的纹理信息: scene_query_node_result.json.zip (3.3 KB)
于是这里我只能先尝试从前端和节点的 uuid
一起,将纹理的 uuid
发送到插件。
通过打印和查看源码,找到了纹理的 uuid
的所在:
代码中:
在将其传输到插件层后,可以通过 API
获取到纹理的详细的信息:
Editor.assetdb.queryInfoByUuid(spriteId, function (err, info) {
Editor.log("info.path: " + info.path);
Editor.log("info.url: " + info.url);
Editor.log("info.type: " + info.type);
});
然后就能看到输出的信息了:
有了这些信息以后,将其发送到 cocos2dx
,在 Canvas
中创建一个 cc.Sprite
就是很简单的事情了。
var self = this;
cc.eventManager.addCustomListener("create-node", function (event) {
self.sprite = new cc.Sprite(event.getUserData());
self.sprite.attr({ x: size.width / 2, y: size.height / 2 });
self.addChild(self.sprite);
});
最终的效果:
当然用起来还是很麻烦的,但是这只是为了寻找一种可能性而已,基本想要实现的功能已经达到了。