[就问你6不6] cocos2dx 入侵 Creator 插件系统 - 3

接着昨天的文章,今天继续实现交互。

前一篇文章已经通过在节点上挂载脚本,然后从前端向插件框架发送消息,再转发至 cocos2dx 实现了,间接的视线了监听 场景编辑器 中节点创建的信息。

纹理获取

creator 中的各种资源都有自己的 uuid 用来作为唯一标识,很多插件相关的消息,传输的都是这样一个 uuid,比如这里我所需要用到的 'scene:query-node' :

这里我并没有直接从前端将所用纹理的信息发送到插件,只是想试一下是否可以在插件一端来主动获取到。所以只是简单的将 nodeuuid 发送到了插件。

通过查阅一些文档,在插件中,可以根据 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);
});

最终的效果:

当然用起来还是很麻烦的,但是这只是为了寻找一种可能性而已,基本想要实现的功能已经达到了。

插件脚本里可以直接在调用场景api:
https://docs.cocos.com/creator/manual/zh/extension/scene-script.html?h=scene-script