こんにちは。今回ブログを担当します長屋です。
今回も前回、前々回に引き続きCocoStudioを触ってみようと思います。
☆CocoStudio☆
http://www.cocos2d-x.org/download
動作環境などはUI Editor編を確認してください。
☆今回からCocoStudioが日本語化されています。
さてこのデータエディタですがエクセルやCSVのデータをJSON形式で吐き出すことができます。将来的にはJSON形式からの読み込みやSQLiteからの読み込みもされる予定です。
現状(ver1.2.0.1)では全ての機能が実装されている訳ではなさそうです。
データのインポート
「Data Editor」を開くと直接下記の様な画面が開きます。
今回以下のエクセルファイルを読み込んでみたいと思います。
・ゲームのステータスデータ
[ファイル]から[テンプレートをインポート]→[EXCEL]
または 左上のフォルダマークをクリックしてエクセルファイルをインポートします。
インポートが完了するとデータテーブル内にエクセルファイルが追加されます。
エクセルファイルは複数インポートすることが可能です。
データテーブル内のエクセルファイルをダブルクリックをすると中のデータがパースされます。
エクセルファイルでは各シート毎にデータが分けられます。
インポートしたデータはエディタ内で値を変更可能です。
JSONファイルへのエクスポート
インポートと同じように[ファイル]から[jsonファイルを出力]
または 左上の保存ボタンをクリックします。
すると以下のウインドウが開かれます。
このウインドウ内で
① シート全体 または 現在作業中のシートのみを出力
② JSONファイルの出力形式の設定
③ JSONファイル出力時のファイル名の設定
が可能です。
JSONファイルのデータを取得
cocos2d-x 2.1.3よりSpineツールのサポート追加によりJSONパーサも追加されました。
そのパーサを使用してJSONファイルを読み込んでみます。
#include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_NS_CC_EXT; //ファイル読み込み unsigned long size = 0; char * pJsonData = (char*)CCFileUtils::sharedFileUtils()->getFileData("test.json", "r", &size); //データを入れる配列 CCArray * pJsonArrays = CCArray::create(); //jsonオブジェクト生成 Json * pJson = Json_create(pJsonData); //読み込んだ文字列は削除する delete [] pJsonData; pJsonData = NULL; //パース int arraySize = Json_getSize(pJson); for(int i = 0; i < arraySize;i++){ Json * pArrayItem = Json_getItemAt(pJson, i); if(pArrayItem){ CCDictionary * pDict = CCDictionary::create(); for(Json * pItem = pArrayItem->child; pItem != NULL; pItem = pItem->next){ if(pItem->type == Json_Number){ pDict->setObject(CCFloat::create(pItem->valuefloat), pItem->name); } else if (pItem->type == Json_String){ pDict->setObject(CCString::create(pItem->valuestring), pItem->name); } } pJsonArrays->addObject(pDict); } } //ログ出力 CCObject * pObj = NULL; CCARRAY_FOREACH(pJsonArrays,pObj){ CCDictElement* pElement = NULL; CCDictionary* pDict = (CCDictionary*)pObj; CCDICT_FOREACH(pDict, pElement){ CCLOG(key = %s,pElement->getStrKey()); CCObject * pObject = pElement->getObject(); if(dynamic_cast<CCFloat*>(pObject)){ CCLOG(value = %d,(int)((CCFloat*)pObject)->getValue()); } if(dynamic_cast<CCString*>(pObject)){ CCLOG(value = %s,((CCString*)pObject)->getCString()); } } }
実行結果
Cocos2d: key = ID
Cocos2d: value = 1
Cocos2d: key = LV
Cocos2d: value = 1
〜〜〜
無事、中のデータを取得することができました。
このパーサを利用してJsonLoaderなどを作ると楽になると思います。
次回は「Animation Editor」を触ってみたいと思います