我正在尝试在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的一个属性,我想我已经扩展了,但是我收到了这个错误。任何想法发生了什么?
答案 0 :(得分: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
方法,则会出现错误(或者至少上次我尝试时就是这种情况)。
答案 1 :(得分:0)
尝试这样:
var FlowingText = $.extend(cc.LabelTTF, {
update : function(dt) {
console.log("update. dt:"+dt);
}})
现在应该可以FlowingText.create("", "r-mplus-1c-m.ttf", 24);