1.全局变量
A B两个脚本如果想相互调用,可以用globalThis定义一个全局变量比如:
A脚本里面存在Afun()方法,B脚本里面存在Bfun()方法,那么可以在初始时在A脚本里面定义一个globalThis._A=this;在B脚本里面定义一个globalThis._B=this;那么之后就可以在A脚本里面调用globalThis._B.Bfun()函数了。也可以在B脚本里面调用globalThis._A.Afun()函数。
2.全局事件
同样的,我们可以直接定义一个全局事件来一劳永逸。在脚本初始时我们创建globalThis._event=new cc.EventTarget();之后就可以在其他所有脚本里面通过globalThis._event.emit("callType",data)来触发监听事件。通过globalThis._event.on("callType",(data)=>{})来响应事件。
3.单实例事件
export default class eventTargetMar {
static ins:cc.EventTarget=null;
static getInstence(){
if(!this.ins)
{
this.ins=new cc.EventTarget();
}
return this.ins;
}
}
通过上面方法可以实现一个单实例类,在其他脚本里面调用let ec=eventTargetMar.getInstence()即可通过ec.emit跟ec.on来接收与响应。
4.通过编辑器引入。
在A脚本里面写入以下代码
@property(cc.Node)
B_Node:cc.Node=null;
在编辑器里面把带有B脚本的节点拖入B_Node块中。即可在A脚本中通过
let bNode=this.B_Node.getComponent(B);
bNode.Bfun();
来跨脚本调用B的方法。
Tips:如果想让B也能调用A的方法,则需要在B脚本里面定义init()方法,如下:
a_node;//属性
init(A){
this.a_node=A;
}
然后在A脚本里面调用
this.B_Node.getComponent(B).init(this);
方法,即可在B脚本里面通过this.a_node.Afun()来实现B脚本的跨脚本调用。