Edited at

cocos2d-jsでproject.jsonを使わずに初期化する

More than 3 years have passed since last update.


project.json

cocos2d-jsを使ってみようとCocos2d-JS Download Builderからファイルをダウンロードすると、project.jsonというファイルが入っている。中身は


project.json

{

"debugMode" : 1,
"frameRate" : 60,
"id" : "gameCanvas",
"renderMode" : 1,
"jsList" : []
}

こうなっている筈。

調べてみればそれぞれが何の設定なのかは公式に書いてあるのだが、ブラウザゲームを作ろうとした場合、通常は何かしらのサーバサイドのフレームワークと組み合わせることが多く、「エントリーポイントと同一ディレクトリにproject.jsonを置いておく」というのは運用しづらい。直接初期化したいが、その方法は書いていない。


直接初期化したい

困ったときにはソースコードを見よう。ということでcocos2d-js-v3.8.jsをproject.jsonで検索すると、この辺りで読み込みを行っているようだ。


cocos2d-js-v3.8.js

if (document["ccConfig"]) {

self.config = _init(document["ccConfig"]);
} else {
try {
var cocos_script = document.getElementsByTagName('script');
for(var i=0;i<cocos_script.length;i++){
var _t = cocos_script[i].getAttribute('cocos');
if(_t === '' || _t){break;}
}
var _src, txt, _resPath;
if(i < cocos_script.length){
_src = cocos_script[i].src;
if(_src){
_resPath = /(.*)\//.exec(_src)[0];
cc.loader.resPath = _resPath;
_src = cc.path.join(_resPath, 'project.json');
}
txt = cc.loader._loadTxtSync(_src);
}
if(!txt){
txt = cc.loader._loadTxtSync("project.json");
}
var data = JSON.parse(txt);
self.config = _init(data || {});
} catch (e) {
cc.log("Failed to read or parse project.json");
self.config = _init({});
}
}

これはわかりやすい。documentccConfigがあればそっちを使うようになっている。


project.jsonを使わずに初期化

cocos2d-jsの読み込み前にdocument.ccConfigを定義すればよいのだから、エントリーポイントがindex.phpなら


index.php

<script>

document.ccConfig = {
"debugMode" : 1,
"showFPS" : true,
"frameRate" : 60,
"id" : "gameCanvas",
"renderMode" : 0,
"jsList" : []
}
</script>
<script src="./cocos2d-js-v3.8.js" charset="UTF-8"></script>

こんな感じにすれば良い。