如何在Cocos2d-JS中将父类Sprite转换为子类MySprite

时间:2016-01-03 15:20:06

标签: javascript cocos2d-js

我有一个MySprite类作为Sprite的子类,带有一些加法方法。

var MySprite = cc.Sprite.extend({

    ctor:function(){
        this._super();

    },

   doSomethingStrange:function(){
   //meow meow
   }

}
);

在游戏场景中,我想从rootNode获取精灵并将其转换为MySprite,以便我可以从MySprite调用doSomethingStrange。但是,我还没有找到任何方式在javascript中输出类型。

var PlayLayer = cc.Layer.extend(new function() {


        this.ctor=function () {
            this._super();
            var rootNode = ccs.csLoader.createNode(res.scene_playscene_json);
            this.addChild(rootNode);    
        };  

        this.meow_meow = function(rootNode){
             cat  = rootNode.getChildByTag(numberTagBegin);
             // do something here to cast cat from Sprite to MySprite
             cat.doSomethingStrange();
        };
});
var playScene = cc.Scene.extend({
    onEnter:function(){
        this._super();
        var layer = new PlayLayer();
        this.addChild(layer);
    }
});

1 个答案:

答案 0 :(得分:0)

这是做到这一点的方法: 在你的MySprite中:

 var MySprite = cc.Sprite.extend({

    ctor:function(){
        this._super();

    }
}); /*end of extend function call*/

MySprite.prototype.doSomethingStrange = function(){
   //meow meow
}

然后您可以访问doSomethingStrange而无需任何投射

   this.meow_meow = function(rootNode){
         cat  = rootNode.getChildByTag(numberTagBegin);
         // do something here to cast cat from Sprite to MySprite
         cat.doSomethingStrange();
    };

您在上一个示例中声明doSomethingStrange的方式 - 实际上是一种声明私有方法的JavaScript方式(You can read more about Module pattern here,以防您感到好奇)

关于JavaScript继承的风格有很多信息。 This article 可能会有所帮助