2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

cocos2d-jsのシーン切り替えのtransitionが期待通り動かないことがある件

2
Last updated at Posted at 2015-04-12

フェードアウト、インで切り替えようとしたところ途中で一瞬全部表示されるという妙な挙動となる。
js版だけでなくどうもcocos2dのクセらしい。
古い情報だが Objective-C 版での事例を参考に対応。参考にしたのは次のページ
Cocos2D iPhone - removing the black screen between CCTransition

エンジンのソースを追いかけたわけでは無いので本当の理由は不明。
ただ遷移後のシーンで開始直後に Menu を用意するケースで発生する模様。(前述の参考リンクでもそれらしきことが書かれている)

今回は cc.Transition??? を使わずに対応した。
cc.Transition??? を使用してシーン遷移を行う(2015/04/15修正)
コードはだいたい次の通り(実際のコードは少々面倒なので説明のための書き方としている)

遷移前のレイヤー
checkGameOver: function() {
	if (ゲームーオーバーであれば) {
		this.scheduleOnce(this.onGameOver, 1, "toGameOver");
	}
},
onGameOver: function () {
	cc.LoaderScene.preload(g_gameover_resources, function () {
		cc.audioEngine.stopMusic();
		cc.audioEngine.stopAllEffects();
		var scene = new cc.Scene();
		var layer = new GameOverLayer();
		scene.addChild(layer);
		cc.director.runScene(new cc.TransitionFade(1.2, scene));
	}, this);
},
遷移後のレイヤー
init: function(score){
	this._super();
	gFadeInMask = new cc.LayerColor(cc.color(0,0,0,255), SCREEN_WIDTH, SCREEN_HEIGHT);
	this.addChild(gFadeInMask, 500);
	gGameOverLayer = this;
},
onEnter: function() {
	this._super();
	var action = cc.fadeTo(0.6, 0);
	gFadeInMask.runAction(cc.sequence([action, cc.callFunc(function() {
		gFadeInMask.removeFromParent(true);
	}, gGameOverLayer)]));
},

参考リンクでの対応事例と違って遷移前のレイヤーでもマスクを用意してフェードアウトを行っている。
自分のやり方が悪いのかcocosのバージョンが違うためなのかは不明だが、同じアプローチではちらつきを解消できなかったため。
(参考リンクでの対応事例は runScene() を呼び出す際に Transition を使用してフェードインアウトを実現しているためもう少しシンプルな記述)

フェードはこれでよいが他のtransitionではどうしたものか。

2014/04/15

cc.Transition??? を使うスタイルへ修正できた。
実に単純な話で遷移前のレイヤーで update メソッド内から普通の関数コールの形で onGameOver() を呼び出していたのが問題だった。
scheduleOnce() を使用してタスクを遅延実行する形を取ったところ組込み Transition を使うスタイルを無事実現できた。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?