cocos2d-x3.10 + js点击按钮调用函数不起作用

在官网下载了cocos,新建了一工程,用cocos studio在场景中拖了一个label和一个button
目标是点击button改变label的内容,但是不起作用

app.js的代码如下:

var HelloWorldLayer = cc.Layer.extend({

mainscene: null,

ctor: function () {

    this._super();
    var size = cc.winSize;

    mainscene = ccs.load(res.MainScene_json).node;
    this.addChild(mainscene);
    this.dealWidgets();

    return true;
},

testFunction: function () {
    return "aaa";
},

dealWidgets: function () {
    var btnCount = ccui.helper.seekWidgetByName(mainscene, "Button_1");
    btnCount.addClickEventListener(this.btnClickEvent);
},

btnClickEvent: function (sender, type) {
    var text = ccui.helper.seekWidgetByName(mainscene, "Text_1");
    text.string = this.testFunction();
},

});

var HelloWorldScene = cc.Scene.extend({
onEnter: function () {
this._super();
var layer = new HelloWorldLayer();
this.addChild(layer);
}
});

btnCount.addClickEventListener(this.btnClickEvent); 这一句错了,缺了一个参数。

btnCount.addClickEventListener(this.btnClickEvent,this); 加上一个this 试一试。

刚试了,无效!

是按钮无效,还是里面的setString,无效?

我也不知道,label没有改变

要不你试试新建一工程把这段代码复制了看看嘛

我调试了一下,好像是调用this.testFunction()就一直循环出不来了

你不是找到问题了么

没找到问题呢,我菜鸟,不熟,如果是cocos框架问题,我就无能为力了,我只是从我自己写的代码层面看有什么问题,怎样写能调用成员函数得到结果就行了

text.string = this.testFunction(); //this指向问题,this没有指向那个层 (我也是刚学js,我也不知道指向谁。查资料说是指向调用这个函数的对象)

改成这样即可
dealWidgets: function () {
var main = this; //此时this 指向层
var btnCount = ccui.helper.seekWidgetByName(mainscene, “Button_1”);
btnCount.addClickEventListener(function () {
var text = ccui.helper.seekWidgetByName(mainscene, “Text_1”);
text.setString(main.testFunction()+""); //调用层的testFunction函数
});
},

我感觉,是指向了按钮本身。

mainscene是在另外一个函数里面,给dealWidgets里面的不一样了。你应该用
var text = ccui.helper.seekWidgetByName(main.mainscene, “Text_1”);

谢谢大侠!搞定了,就是这个this的问题,没有用好,放到事件函数体里造成了死循环!

var HelloWorldLayer = cc.Layer.extend({

ctor: function () {

    this._super();
    var size = cc.winSize;

    mainscene = ccs.load(res.MainScene_json).node;
    this.addChild(mainscene);
    this.dealWidgets();

    return true;
},

testFunction: function () {
    return "aaa";
},

dealWidgets: function () {
    main = this;
    var btnCount = ccui.helper.seekWidgetByName(mainscene, "Button_1");
    btnCount.addClickEventListener(this.btnClickEvent);
},

btnClickEvent: function (sender, type) {
    var text = ccui.helper.seekWidgetByName(mainscene, "Text_1");
    text.string = main.testFunction();
},

});

var HelloWorldScene = cc.Scene.extend({
onEnter: function () {
this._super();
var layer = new HelloWorldLayer();
this.addChild(layer);
}
});

btnCount.addClickEventListener(this.btnClickEvent, this);

改成这样的,后面加个this

var text = ccui.helper.seekWidgetByName(mainscene.node, “Text_1”);

这错误很明显啊。没有提示????