如何指定脚本组件属性为自定义脚本组件?

目前我要做一个摇杆组件,组件只需要输出一个角度即可。角色需要一个摇杆输入,那么在角色的节点上,添加一个Player.js的组件,组件中声明一个属性:Joystick,这个属性我希望是严格限制为摇杆类(Joystick.js中定义的组件类)。

目前没有找到如何实现。看了使用 cc.Class 声明类型,没找到属性类型应该怎么写。

下边是项目结构:
Player是角色节点,拥有一个Player.js脚本,脚本中定义属性,期望一个包含Joystick脚本组件的摇杆节点。

Player.js中的属性声明部分

cc.Class({
    extends: cc.Component,
    properties: {
        joystick: {
            default: null,
            type: cc.Node, // 这里,应该写啥才能限制绑定的Node一定包含Joystick脚本组件?
            displayName: "摇杆",
            tooltip: "摇杆节点,包含Joystick脚本组件"
        },
    },

如代码中注释的疑问,type应该写成什么?

Joystick.js的部分声明代码:

cc.Class({
    name: "Joystick",
    extends: cc.Component,
    // ...
})

我还想把这个做成一个多个项目可复用的自定义组件(或者是插件商店的插件?),搜索论坛,发现也有人问,答复是把组件做好,拖成prefab,然后,把prefab拷贝到其他项目进行使用。。。。 有没有高级点儿的方法?

Player.js中

var Joystick = require("Joystick");
cc.Class({
  ...
    type: Joystick,
  ...
});
1赞

感谢~~ 测试就是我要的效果~

不过,这个就有点儿强制依赖了。。 我希望这个能做成别人也可以用,然后,不想在Player中require其他的js文件。是否可行?

你这里想声明编辑器中需要拖入一个带Joystick组件的节点,就是强依赖了,代码里require依赖一下有什么关系,反正要给别人用就两个都给。
实在不想依赖,就还是声明joystick为cc.Node,然后代码中动态从节点上面获取Joystick组件:

var joystickComponent = this.joystick.getComponent("Joystick");

但你得自己保证拖进去的节点上有这个组件。

嗯,如你所说,指定的时候已经强依赖了~ 哈哈 所以,还是按照你之前提供的方案做吧~

其实,我还想了解下,怎么才能跟cc.Node一样,可以直接就用,不用require。。。然后,那个Joystick怎么才能多项目方便共享(插件商店?自定义组件?)