TS跨脚本调用的几种方法

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值