Cocos2d-js类扩展

时间:2014-07-28 10:12:56

标签: javascript cocos2d-js

我正在尝试在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的一个属性,我想我已经扩展了,但是我收到了这个错误。任何想法发生了什么?

2 个答案:

答案 0 :(得分:2)

这是一个已知问题。

当您使用extendcc类创建自己的类时,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方法,则会出现错误(或者至少上次我尝试时就是这种情况)。

答案 1 :(得分:0)

尝试这样:

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

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

DEMO