首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocos2d-js类扩展

Cocos2d-js类扩展
EN

Stack Overflow用户
提问于 2014-07-28 10:12:55
回答 2查看 1.8K关注 0票数 2

我试图在cocos2d-js中扩展cc.LabelTTF类。下面的代码有问题:

代码语言:javascript
复制
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的一个属性,我认为我已经扩展了它,但是我得到了这个错误。知道发生什么事了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-28 19:42:38

这是一个众所周知的问题。

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

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

这是在coco的代码文件中使用的标准方法:

代码语言:javascript
复制
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);
    }
}); 

你可以用这个和:

代码语言:javascript
复制
var myFT = new FlowingText("asdf", "r-mplus-1c-m.ttf", 24);

或者你可以这样做:

代码语言:javascript
复制
FlowingText.create = function(text, font, size) {
    return new FlowingText(text, font, size);
};

像这样使用它:

代码语言:javascript
复制
var myFT = FlowingText.create("asdf", "r-mplus-1c-m.ttf", 24);

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

票数 2
EN

Stack Overflow用户

发布于 2014-07-28 12:19:10

就像这样:

代码语言:javascript
复制
var FlowingText = $.extend(cc.LabelTTF, {
 update : function(dt) {
        console.log("update. dt:"+dt);
    }})

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

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24992995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档