require导出一个组件之后,怎么使用不了

require导出一个组件之后,怎么使用里面的属性方法的

  //有一个playerInfos.js脚本,继承cc.Component,里面有一个func()我在另个相同类型的user.js按照下面的写
  
  var playerInfos=require("playerInfos");
  ......
  onLoad: function() {
         //为什么这么写是报错的,说func is not a function;   导出的组件是怎么用的?
         playerInfos.func();
      
   }

能否贴一下 playerInfos.js 脚本 里面的写法?

     var playerInfos=cc.Class({
     extends: cc.Component,

    properties: {
    
             thename:{
             default:null,
              type:cc.Label,
            },
          headicon:{
           default:null,
           type:cc.Sprite,
        
     },
  
},

     onLoad: function () {
 
   },

    func:function(){
     cc.log("调用了func");  
  },


// called every frame, uncomment this function to activate update callback
// update: function (dt) {

// },

});

好的。就是这样

var playerInfos=require(“playerInfos”);

onLoad: function() {

     var playInfosCom = this.playerInfos.getComponent('playerInfos');
     playerInfos.func();      

}
试试这样,你用require吧脚本组件赋给了一个变量,但是需要通过节点访问,不然就得再命名一个变量,通过getComponent来获得playInfos组件。

也不行,报了一个错误 Cannot read property ‘getComponent’ of undefined

不行的话,把你的 demo 发上来吧,看看是什么问题

你的这个playerInfos脚本附在节点上没有?

附在节点上了。

http://www.cocos.com/docs/creator/scripting/access-node-component.html你参考一下文档里面这方法看看,我估计访问不到脚本是是访问节点的问题

我是练习来的,demo也很简单。我看到文档中能导出组件,所以就试了一下,简单点说,(本来也挺简单的)
两个layout的节点分别对应了playerInfo.js 和 user.js 我想在user.js中调用playerInfo.js中的func函数
我在user.js就是上面的写法,是不是我的用法是错误的。

    var playerInfos=require("playerInfos");
              .............
        onLoad: function() {
        //为什么这么写是报错的,说func is not a function;   导出的组件是怎么用的?
       playerInfos.func();
  
     }

那你应该去得到 playerInfos 这个节点,然后通过这个节点进行getComponent(‘playerInfos’)

你现在需要做的:

1、获取节点 playerInfo
2、通过 var comp = playerInfo.getComponent(‘playerInfos’) ,然后在 comp。func();

跨节点访问组件,要么在user中定义一个节点绑定playerInfo,然后用getComponent获取脚本组件,要么在user脚本里面直接定义var playerInfo = cc.find(‘Canvas/playerInfo’).getComponen(‘playerInfo’);之后就可以playerInfos.func();来调用函数了。

非常感谢,我是想使用require这种模块化的方法来试试。

Creator里面脚本是作为组件存在的,访问组件必须经过组件所在的节点,你用require只是获取的组件,要使用脚本组件里的函数还是要通过访问脚本组件所在的节点的方式进行。

非常感谢。是不是说 var playerInfos=require(“playerInfos”);这个组件,然后 playerInfos.node这样就是他的节点了?(前提是我在user里面有定义和绑定playerInfo)这个节点。

不是,在user里面有定义和绑定playerInfo,那么就可以通过定义的节点获得脚本组件。这里面定义有两种方法,一种是定义playerInfo:cc.Node,那么playerInfo就是一个节点,你就需要gerComponent来获得节点下的组件;另一种是require后直接定义playerInfo:playerInfo,那么playerInfo就是脚本组件,你只要绑定上有playerInfo脚本的节点上去就可以直接用this.playerInfo.func()来访问函数。这里面节点和脚本名字相同有些容易混淆,建议你以后可以用首字母大小写区分或者别的方式来区别节点和脚本。

谢谢你的回复,在官方里面有这样的一个文档就说:


我就是想试试这种方法模块化的方法来来跨组件访问。我是不太明白这句话是什么意思,是不是require之后就可以随便使用这个导出组件里面的方法和属性等等。为什么我上面就是按照这种做法,就出错了,我就卡在这里。有点郁闷。(开来我的中文理解能力还有很大的提升空间,呵呵。)

谢谢,(我有点读不懂文档,囧)

这个我也疑问过,但是试验后发现只有通过getComponent来访问脚本或者require后直接在properties里面定义脚本才能调用里面的函数,而这两种方法都需要绑定节点,如果不想绑定节点的话,最方便的还是用cc.find找到节点。