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脚本的跨脚本调用。