Cocos2d-x v3.8.1のJSでシーン切り替えする

でも生成されたプロジェクトのバージョンはv3.7.1なんだよね、なんでだろ?

2015/11/21 追記
更新したあと、sourceコマンド打つ前にcocos newしちゃってただけみたい。
— ここまで追記 —

“app.js”はこんな感じ。

var MyApp = MyApp || {};

MyApp.blinkLabel = function (text, size) {
    var label = new cc.LabelTTF( text, "Arial", size );
    label.opacity = 0;
    label.runAction(
        cc.repeatForever(
            cc.sequence(
                cc.fadeIn(0.9),
                cc.fadeOut(0.1)
            )
        )
    );

    return label;
};

MyApp.TitleLayer = cc.Layer.extend({
    sprite:null,
    ctor:function () {
        this._super();

        var size = cc.winSize;
        var startLabel = MyApp.blinkLabel( "Touch to Start!", 38 );
        startLabel.x = size.width / 2;
        startLabel.y = size.height / 2;

        this.addChild( startLabel, 5 );
        var listener = cc.EventListener.create( {
            event: cc.EventListener.TOUCH_ONE_BY_ONE,
            swallowTouches: true,
            onTouchBegan: function(touch, event) {
                cc.director.runScene(
                    cc.TransitionSlideInR.create( 2.0, new MyApp.NextScene() )
                );
            }
        } );
        //console.log( "checkAvailable", listener.checkAvailable() );
        cc.eventManager.addListener( listener, this );

        return true;
    }
});

MyApp.TitleScene = cc.Scene.extend( {
    onEnter:function() {
        this._super();
        this.addChild( new MyApp.TitleLayer() );
    }
} );

MyApp.NextLayer = cc.Layer.extend({
    sprite:null,
    ctor:function () {
        this._super();

        var size = cc.winSize;
        var startLabel = MyApp.blinkLabel( "Touch to Return!", 38 );
        startLabel.x = size.width / 2;
        startLabel.y = size.height / 2;

        this.addChild( startLabel, 5 );
        var listener = cc.EventListener.create( {
            event: cc.EventListener.TOUCH_ONE_BY_ONE,
            swallowTouches: true,
            onTouchBegan: function(touch, event) {
                cc.director.runScene(
                    cc.TransitionSlideInL.create( 2.0, new MyApp.TitleScene() )
                );
            }
        } );
        //console.log( "checkAvailable", listener.checkAvailable() );
        cc.eventManager.addListener( listener, this );

        return true;
    }
});

MyApp.NextScene = cc.Scene.extend( {
    onEnter:function() {
        this._super();
        this.addChild( new MyApp.NextLayer() );
    }
} );

なので、”main.js”の下の方にあるrunSceneの引数はこんな感じ。

    //(省略)
    //load resources
    cc.LoaderScene.preload(g_resources, function () {
        cc.director.runScene(new MyApp.TitleScene());
    }, this);
};
cc.game.run();

ハマりどころとしては、
ググった結果を元にドキュメントを検索してみたものの、
getInstanceもないし、replaceSceneも見当たらなくて、
結果的にソースを読んで解決しました。
とても辛かったです。

cc.Director#runScene(20行くらい)は、一読の価値ありです。

おしまい。

(*1) “.cocos-project.json”に記述されてる。

Leave a Comment