Cocos Studioデータの読み込み

Cocos Studioで作成したアニメーション、UIデータをcocos2d-x3で読み込む例です。
Cocos StudioはWindows版です。

今回使用したバージョン

  • Cocos2d-x 3.1
  • Cocos Studio 1.5.0.1(Windows)

事前準備
必要なimport、usingの記述を加えます。

hファイル

#include "ui/CocosGUI.h"
#include "cocostudio/CocoStudio.h"

cppファイル

using namespace ui;
using namespace cocostudio;

Androidで動かすには、Android.mkファイルを編集し、cocostudio関連の2箇所を有効にします。

...
# LOCAL_WHOLE_STATIC_LIBRARIES += spine_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
...
# $(call import-module,editor-support/spine)
$(call import-module,editor-support/cocostudio)
# $(call import-module,network)
...

エクスポートファイルの置き場所
Cocos StudioでエクスポートするとExportフォルダの下にフォルダとファイル一式がエクスポートされるので、
フォルダごとResourcesにコピーします。

Xcodeでプロジェクトに登録する場合は、”Create folder references for any added folders”を選択します。

AnimationEditor

	// Cocos Studio アニメーションデータ取り込み
	ArmatureDataManager::getInstance()->addArmatureFileInfo("DemoPlayer/DemoPlayer.ExportJson");
	// アニメーションオブジェクト作成
	auto character = Armature::create("DemoPlayer");
	character->setPosition(Point(visibleSize.width * 0.5f,visibleSize.height * 0.5f));
	character->setScale(0.25f);
	this->addChild(character,100);

	// アニメーション実行
	character->getAnimation()->play("killall");

UIEditor
作成したUIをレイヤーに追加

	// UIレイヤー追加
	Layout *layer = dynamic_cast<Layout*>(GUIReader::getInstance()->widgetFromJsonFile("SampleUIAnimation/SampleUIAnimation.json"));
	this->addChild(layer,200);

アニメーションを実行
※playActionByNameメソッドの第一引数はJSONファイル名のみで、フォルダ名は不要。
第二引数はアニメーション名。

	// アニメーション実行
	ActionManagerEx::getInstance()->playActionByName("SampleUIAnimation.json", "Animation1");

ボタンのイベントを追加

	// ボタンのイベント追加
	Button* testBtn = dynamic_cast<Button*>(layer->getChildByName("TextButton"));
	testBtn->addTouchEventListener(this, toucheventselector(HelloWorld::buttonClick));
}

// ボタンをクリックした時の処理
void HelloWorld::buttonClick(cocos2d::Ref *sender, cocos2d::ui::TouchEventType type)
{
	if(type == TouchEventType::TOUCH_EVENT_BEGAN)
	{
		
	}
	else if(type == TouchEventType::TOUCH_EVENT_MOVED)
	{
		
	}
	else if(type == TouchEventType::TOUCH_EVENT_ENDED)
	{
		
	}
}

ビットマップフォントのテキストを変更

     auto scoreLabel = dynamic_cast<TextBMFont*>(layer->getChildByName("ScoreLabel"));
     scoreLabel->setString("Score:0");