cocos2d-x 3.0 のUIを使った話
UI関連の機能がいろいろ入ったそうなので、その中のUIButtonを使ってみた。
……使ってみたかったけど、使えなかった話。
MenuScene.cpp
USING_NS_CC; using namespace ui; ~~~~~ void MenuScene::createGameStartButton() { Button* startButton = Button::create(); startButton->setTouchEnabled(true); startButton->setPosition(Point( 100, 100 )); startButton->addTouchEventListener(this, toucheventselector(MenuScene::startButtonEvent)); this->addChild(startButton); } void MenuScene::startButtonEvent(Object* pSender, TouchEventType type) { switch (type) { case ui::TOUCH_EVENT_BEGAN: break; case ui::TOUCH_EVENT_MOVED: break; case ui::TOUCH_EVENT_ENDED: break; case ui::TOUCH_EVENT_CANCELED: break; default: break; }
参考:
iPhone - Cocos2d-x Betaでチェックしておきたい変更点(Value,EventListener,gui::UIButton,gui::UIPageViewなど) - Qiita
とりあえずこんな感じにかいてビルドしてみると、
ui/GUIDefine.h:31:38: fatal error: cocostudio/ObjectFactory.h: No such file or directory #include "cocostudio/ObjectFactory.h"
と怒られる。
プロジェクト内の cocos2d/cocos/ui/GUIDefine.h を見に行って、
#include "cocostudio/ObjectFactory.h" ↓ #include "../editor-support/cocostudio/ObjectFactory.h"
includeを環境に合わせて書き換える。
これで再度ビルドすると
ui/UILayoutDefine.h:54: error: undefined reference to 'cocos2d::ui::Margin::Margin()' ui/UILayoutDefine.h:54: error: undefined reference to 'cocos2d::ui::Margin::Margin()' Classes/MenuScene.cpp:44: error: undefined reference to 'cocos2d::ui::Button::create()' Classes/MenuScene.cpp:47: error: undefined reference to 'cocos2d::ui::Button::loadTextures(std::string const&, std::string const&, std::string const&, cocos2d::ui::TextureResType)' Classes/MenuScene.cpp:49: error: undefined reference to 'cocos2d::ui::Widget::addTouchEventListener(cocos2d::Ref*, void (cocos2d::Ref::*)(cocos2d::Ref*, cocos2d::ui::TouchEventType))' ui/UILayoutDefine.h:54: error: undefined reference to 'cocos2d::ui::Margin::Margin()'
盛大に怒られる。
多分cocos2d-xのバグ。
似た事例:Ui::Layout linking problems - Cocos2d-x Forum
続報を待て。