PHP
JavaScript
Android
cocos2d-x
ゲーム制作

mobageで運営していたゲームのソースを公開

概要

一人で開発し、mobage & Yahoo! mobageで運営していたゲームを終了申請しており、ついに今月終了となった。
プログラムを見ると2014年のものがいくつかあるので恐らく3年弱くらいになるだろう。

細かい裏話

mobageで運営していたゲームを終了させた
で。当記事では技術的なことをまとめる。

環境

  • PHP (CakePHP2)
  • MySQL
  • cocos2d-x(JS)

ソース

古く汚いので、そもそもうまく動かない、くらいの人でないと役にはたたないと思われる。

cocos2d-x(JS & Java & Objective-C)側

https://github.com/dala00/endingroad
(フリー素材の再配布等を防ぐため念の為素材は全部削除済み)

サーバー(PHP)側

セキュリティ上(主にmobageのため)の懸念があったのでほとんど削除して公開している。
https://github.com/dala00/endingroad-server

ビルド

ゲームはcocos2d-xで作られており、Android、iOS、PCブラウザのハイブリッド。(iOSは結局年間1万円の費用を払うのが嫌になってアカウントを継続させなかったのでリリースはしておらず、一応ソースは混じっているが今回詳細は書かない)

当時いろいろ調べたが、debug, releaseの切り替え方法が分からなかった。ちゃんと切り替えないと開発環境と本番環境のサーバーURLを切り替えられないので、無理矢理なんとかした。

具体的には、リリースフラグのみを書いたjsファイルを用意し、ビルド時にそれを入れ替えるようにした。

Android用batファイル
move src\release.js src\release_false.js
move src\release_true.js src\release.js
call cocos compile -p android -m release
move src\release.js src\release_true.js
move src\release_false.js src\release.js

あとは同様にして、画像や音声ファイルなどもリリースの時には含めないようにして容量を軽くしたりできる。(後述のAssetManagerにより、アプリ自体に含める必要はないため)

WEBの場合は動いている環境のURLで判断できるのだが、jsファイルが全部まとめてビルドされるので、まとめるべきファイルを書いたproject.jsonに切り替えている。

WEB用batファイル
move project.json project.native.json
move project.web.json project.json
call cocos compile -p web -m release
move project.json project.web.json
move project.native.json project.json

今はちゃんとしたやり方があるかもしれない。

ゲームの更新

AssetManagerを使っているので、Androidアプリを更新しなくてもサーバー操作のみでプログラムとデータを更新できる。

最初にAssetsLoadSceneに行き、更新があれば更新。なければゲームに移動。スマホアプリは更新がすぐできないので、不具合などが出た時にすぐ直せるよう、AssetManagerの利用は必須だろう。

サーバーにjsや素材をアップロードして、AssetsManagerControllerにアクセスすれば全部更新準備できるようにしていた。

データの管理

データはそれぞれ種類によって管理方法が異なる。

サーバー側で不要なもの

例えばスキルのエフェクト情報や、ステージのメッセージなど。

こういったサーバー側で不要なものはcocos2d-xのプロジェクト内にのみ載せておく。Spreadsheetで管理し、jsの形でエクスポートできるようにしておき、プロジェクト内のファイルと置き換えるだけ。具体的には下記に昔書いていた。

cocos2d-js用のデータをgoogleスプレッドシートで管理する

サーバー側、ゲーム側両方で必要なもの

ゲーム開始時にサーバー側から読み込んでくる。

両方で必要だが、読み込めないもの

データが重すぎると読み込めない。(jsonのデコードに失敗するっぽい)
なのでそれはサーバー側のプログラムでjs出力できるようにしておき、それをcocos2d側のプロジェクトのファイルにコピーする。

jsとネイティブ側の連携

課金処理とかもあるので、jsとネイティブ側の連携は必須。下記に昔書いていた。

cocos2d-jsのAndroidでjavaからjavascriptを呼び出す
cocos2d-jsでObjective-Cからjavascriptを呼び出す

当時も全然情報無かったし今検索しても全然出てこないんだけど何かもっといい方法とかになったのかな。

まとめ

ソースはだいぶ古いし汚いので何の参考にもならないと思うが、運用のために最低限の必要な考え方はある程度分かるかもしれない。(あくまで小規模なもののみで大規模なアプリには使えないかもしれないが)

プログラミングに関係ない裏話的なものは下記で。
mobageで運営していたゲームを終了させた