require之后可以执行函数,但好像没有认properties里面的节点

我的相关代码大概是下面这个样子,有两个脚本,分别是挂在Canvas上的game.js,和挂在一个prefab上的ball.js

//game.js
cc.Class({
extends: cc.Component,
properties: {
coin: cc.Node,
},
updateCoin: function () {
this.coin.getComponent(cc.Label).string = “lalala”; //具体不重要,总之是对coin这个节点做了些操作
};
});

//ball.js
var gameScript = new (require(“game”));
cc.Class({
gameScript.updateCoin();
});

然后执行的时候,报this.coin所在的那一行代码cannot read property ‘getComponent’ of null,这个意思应该是顺利的执行到了updateCoin这个函数,但是没有认出coin这个节点。

查了些资料,可能是我太菜了,没有领会到该怎么做才能解决我这个问题,求大佬指教。我的目的是在这个prefab里面发生某些事情的时候,去更新外面的coin的数值。

  • Creator 版本: 2.4.3

你要在编辑器里面,拖动coin节点到game.js的coin里面

已经拖过去了,在game.js里面,我有别的地方更新过coin的数值,所以这个节点是可以正常被操作的

使用事件机制。EventTarget, on/off 监听, emit 触发

我想了下,卡在了一个点上,大佬帮忙看看。

就是我的coin节点在游戏的基础界面上,然后消耗coin的事件发生在一个prefab里。监听的话,应该是在coin这个节点上写监听对吧?例如this.coin.on(…) 这种对吧?我感觉好像没法监听到prefab里面发生的事情,因为外面是没法把target设成prefab里面的那些节点,就在这个问题卡住了。

另外,没有办法用require的方式,认出coin这个节点么?如果能认出的话就会很方便了。。。

新建一个单例的js文件 继承于cc.EventTarget
监听或者触发事件都通过这个单例对象

大佬太高级了,单例这个词听到过,但不懂什么意思,并且也想象不到咋解决我这个问题,能稍微说的详细一点点么,辛苦大佬了。。。

另外,想问一下,我感觉我这个问题,抽象出来就是‘在一个prefab里去更新外面的数据’的情况算是挺常见的么?如果抽象到这个层面的话,常见的解决方案是什么?就是大佬说的这个单例监听的方式么?


可以看看这个里面的

好的,我看看先,谢谢大佬

大佬,思路上大佬说的很清晰,我的理解是用一个脚本专门管理游戏里面可能会被到处用到的通用数据,然后一个地方监听这里的数据变化,其他地方该怎么改就怎么改,这样一旦发生改动,监听到了就可以做相应的处理。

但是,我现在还不会TS,我游戏也是JS写的,也不大合适现在转TS。所以,虽然思路理解了,但一下子不知道那个管理数据的脚本该怎么写(也还没太理解单例),方便给个JS的例子不?麻烦大佬了。。。

我一直用的ts,js 应该也有单例的写法, 这个思想是这样, 你多试试应该就可以了

终于搞定了,不过原理上没太明白,为什么要用单例?

单例是因为其他所有文件都引入同一个对象