2

我正在尝试在 cocos2d-js 中扩展 cc.LabelTTF 类。我在使用以下代码时遇到问题:

var FlowingText = cc.LabelTTF.extend({
    update : function(dt) {
        console.log("update. dt:"+dt);
    }
}); 

我希望 FlowingText 能够成功实现 cc.LabelTTF 的所有属性,但以下代码崩溃:

FlowingText.create("", "r-mplus-1c-m.ttf", 24);

给我的错误

Uncaught TypeError: undefined is not a function

如果我改为这样做,则代码可以正常工作:

cc.LabelTTF.create("", "r-mplus-1c-m.ttf", 24);

'create' 函数是 cc.LabelTTF 的一个属性,我想我已经扩展了它,但我得到了这个错误。任何想法发生了什么?

4

2 回答 2

2

这是一个已知的问题。

当您使用extend从一个类创建自己的类时cc,该create方法不会被继承。如果你看一下 cocos2d 的任何类,你会注意到该create方法总是被附加到原型中,并且由于某种原因,这绕过了扩展机制。

简而言之:您必须重写该ctor方法或编写您自己的create方法。

这是在 coco 的代码文件中制作的标准方式:

var FlowingText = cc.LabelTTF.extend({
    ctor: function(text, font, size){
        this._super(text, font, size);
        //possibly do other stuff here if necesary
    },
    update : function(dt) {
        console.log("update. dt:"+dt);
    }
}); 

您可以将其用于:

var myFT = new FlowingText("asdf", "r-mplus-1c-m.ttf", 24);

和/或你可以这样做:

FlowingText.create = function(text, font, size) {
    return new FlowingText(text, font, size);
};

并像这样使用它:

var myFT = FlowingText.create("asdf", "r-mplus-1c-m.ttf", 24);

额外:请注意,cc.LabelTTF.create()new cc.LabelTTF()可能不一定相同。当您覆盖该ctor方法时,您正在更改它所调用的内容new MyClass()。如果你试图覆盖你的create方法,extend你会得到一个错误(或者至少这是我上次尝试的情况)。

于 2014-07-28T19:42:38.937 回答
0

试试这样:

var FlowingText = $.extend(cc.LabelTTF, {
 update : function(dt) {
        console.log("update. dt:"+dt);
    }})

它现在应该可以工作了FlowingText.create("", "r-mplus-1c-m.ttf", 24);

演示

于 2014-07-28T12:19:10.363 回答