Edited at

「CocosCreatorではじめるゲーム制作」のサンプルゲームを 2.x系 で動かすための修正まとめ


はじめに

CocosCreator(以下CC)でHTML5なゲームを書く機会がありまして、その際にCocosCreatorではじめるゲーム制作 を参考にさせて頂きました。

この書籍でのCCのversionは1.3.3だったのですが、僕が書籍を手にとった2018年の末の時点では2.x系がすでにリリースされていました。

「いけるやろ!」と思って2.xでハンズオンを始めた結果、色んな所で動かず戸惑ったので、ここではversion2.x系でも動かすために変更すべき箇所について記しておきます。


直さないと動かないもの(error)

これらを直せばまずは動きます。


node.getPositionY()/getPositionX() が無くなってる

ERROR: Uncaught TypeError: ground.getPositionY is not a function, location: assets/Script/StageManager.js:0:0

実際は ground.getPositionY()が使われてます。これはground.yにすれば取れるようになります。getPositionXはこのコードには存在しないですが一応書いておきました。


getVisibleSize() の取り方が変わってる

ERROR: Uncaught TypeError: cc.director.getVisibleSize is not a function, location: assets/Script/CommingObject.js:0:0

画面のサイズを取得するためのfunction、返り値はcc.Size。

cc.director.getVisibleSize()がなくなっている模様なので、変わりにcc.view.getVisibleSize()を使いましょう。


cc.randomMinus1To1() が無くなってる

ERROR: Uncaught TypeError: cc.randomMinus1To1 is not a function, location: assets/Script/StageManager.js:0:0

-1から1までの数値を返してくれるfunction、返り値はNumber。

-1から1までの適当な数値を返してくれる関数を作るのが筋なんでしょうが、サンプル内で使われていたのは cc.randomMinus1To1() < 0 という、50%でAとBを出し分けるようなものなので、こんな感じ (Math.random() - 0.5) < 0 に置換すれば良さげです。

Math.randomは[0,1)の範囲で値を取るので、正確には50%じゃないような気もしますが、だいたい50%なので良いと思います。

無敵時間のときに画面外にブロックを飛ばす処理でも使ってました、こちらは(Math.random() - 0.5) * 2ぐらいにしておけばなんとなく-1から1までぐらいの数字になるのでいいんじゃないでしょうか。この処理で使っているのは飛ばす先のY座標なので、正直固定値でもいいっちゃいいですしね。


直さないとうるさいもの(warning)

コンソールにメッセージが流れまくるのがやかましいので、できるだけ直しましょう。だいたいのものはwarningに書いてあるように対応するだけなのですぐです。


cc.AudioClip の指定方法 url->type

[WARN]: Since 1.10, cc.audioEngine accept cc.AudioClip instance directly, not a URL string. Please directly reference the AudioClip object in your script, or load cc.AudioClip by loader first. Don't use audio's URL anymore.

指定の仕方が変わっているので、urlでなくtypeにしておきましょう。


cc.p -> cc.v2

[WARN]: Sorry, cc.p is deprecated. Please use cc.v2 instead

とのことなので、置換しておきましょう。使い方は変わりません。


cc.eventManager

[WARN]: The 'cc.eventManager' will be removed in v2.0, please use 'cc.EventTarget or cc.systemEvent' instead.

Eventの仕組みというか、書き方が大きく変わっています。ちょっと書き換えるのしんどくて対応していません..誰か書いたらコメントください :pray: