求助:已经require了组件,但是仍然无法读取组件内函数

1.首先按照创建了脚本PipeManager.js

cc.Class({
    extends: cc.Component,

    properties: { 
    }, 

    start () {

    },
	createPipe:function(){
		cc.log(111)
	},  
});

2.然后在Game.js 引用脚本

var PipeManager=require('PipeManager'); 
cc.Class({
    extends: cc.Component,

    properties: {
		pipeManager:PipeManager, 
    }, 

    start () { 
		this.pipeManager.createPipe();//报错处
    }, 
});

但是编译总是报错:Uncaught TypeError: Cannot read property ‘createPipe’ of null,而且报错处卸载start函数里,浏览器F12看到这个报错不断出现(不在update里,为什么会一直执行)。
我知道这个问题有点基础,但是确实被卡住了,希望有大神路过解答,或者指个方向。

结贴,找到原因了 组件必须绑定节点,先找到节点,然后找到组件

this.pipeManager 有赋值么?

谢谢哈

你是说在IDE里面绑定节点吗

解决办法是在Game.js里面设置属性

var PipeManager=require('PipeManager'); 
cc.Class({
    extends: cc.Component, 

     properties: {
		//pipeManager:PipeManager,
		pipeLayer: {
            default: null,
            type: PipeManager
        }
    }, 
    start () {  
		this.pipeLayer.createPipe();
		 
    }, 
});

然后在IDE里绑定一个节点

但是也有一个问题,如果我不想绑定节点,直接使用组件里的方法,就不知道怎么搞了。。。。

类似静态方法调用。PipeManager.createPipe();

require 到的只是类,还没有实例化呢。

谢谢,你说的实例化,就相当于我把PipeManager.js绑定到节点上,然后this.xxx.getComonent(“XXX”)或则this.xxx.func()吗?

这里面的pipeManager: PipeManager 同等于 pipeManager: require(‘PipeManager’)

只是指明了pipeManager类型是PipeManager类型,可以理解为 pipeManager: cc.Node(PipeManager) 这样声明

this.pipeManager是一个实例,如果没有把对应的实例在编辑器里拖进去,就相当于null,

所以this.pipeManager.createPipe()调用会报错,报Uncaught TypeError: Cannot read property ‘createPipe’ of null

如果你不想在编辑器里面拖,就不要声明属性,也不要用实例调用方法,应该把createPipe变为类方法,直接用类调用

两种方式:
1.把你想要调用的方法修改为静态方法,而不是实例方法。这样你require到类以后就可以直接通过类名调用静态方法了
2.require到类以后,手动去实例化一个组件对象实例,再调用实例方法。对于辅助工具类之类的文件,可以采用单例的模式来设计

谢谢,了解了。。。

谢谢,知道了~~~~

抱歉哦,解决方案只能设置一个,谢谢你的帮助和精彩的回答:yum: