У меня возникли трудности с добавлением прокрутки в меню с помощью cocos2d-x. Я использую cocos2d::extension::ScrollView::create() для создания прокрутки, но при компиляции получаю ошибку:
Ошибка 6 ошибка LNK2019: неразрешенный внешний символ "public: static class cocos2d::extension::ScrollView * __cdecl cocos2d::extension::ScrollView::create(class cocos2d::Size,class cocos2d::Node *)" (?create @ScrollView@extension@cocos2d@@SAPAV123@VSize@3@PAVNode@3@@Z), на который ссылается функция "public: virtual bool __thiscall ScrollMenuScene::init(void)" (?init@ScrollMenuScene@@UAE_NXZ) C:\ Cocos\cocos2d-x-3.0\~\MyCompany\MyGame\proj.win32\ScrollMenuScene.obj MyGame
Ниже приведен фрагмент кода файлов h и cpp, вплоть до минимума медведя, но включающий весь необходимый код, который вызывает ошибку сборки.
Основная строка, вызывающая ошибку:
_scrollView = cocos2d::extension::ScrollView::create(_scrollContainer->getContentSize(), _scrollContainer);
Если я не создам экземпляр указателя _scrollView, он не выдаст ошибку, поэтому это происходит, когда я вызываю ScrollView::create
Любая помощь будет оценена. Спасибо.
*Обратите внимание, что в приведенном ниже коде я добавил весь файл, чтобы показать включения, определения и реализации, поскольку именно здесь я обычно нахожу неразрешенные ошибки.
.h файл
#ifndef SCROLL_MENU_SCENE_H
#define SCROLL_MENU_SCENE_H
#include "cocos2d.h"
#include "cocos-ext.h"
class ScrollMenuScene : public cocos2d::Layer
{
private:
cocos2d::Node* _scrollContainer;
cocos2d::extension::ScrollView *_scrollView;
cocos2d::Menu* _menu;
public:
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
~ScrollMenuScene(void);
// implement the "static create()" method manually
CREATE_FUNC(ScrollMenuScene);
//Menu callback.
void Menu_Handler(cocos2d::Ref* sender);
};
#endif //SCROLL_MENU_SCENE_H
.cpp-файл
#include "ScrollMenuScene.h"
cocos2d::Scene* ScrollMenuScene::createScene()
{
// 'scene' is an autorelease object
auto scene = cocos2d::Scene::create();
// 'layer' is an autorelease object
auto layer = ScrollMenuScene::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool ScrollMenuScene::init()
{
//Call base first.
if (!Layer::init())
{
return false;
}
cocos2d::Point worldCenter = cocos2d::Point(this->getContentSize() / 2);
_scrollContainer = cocos2d::Node::create();
_scrollContainer->setPosition(worldCenter);
_scrollContainer->setContentSize(this->getContentSize() / 2); //half the size of the layer.
_scrollView = cocos2d::extension::ScrollView::create(_scrollContainer->getContentSize(), _scrollContainer);
_scrollView->setPosition(worldCenter);
_scrollView->setDirection(cocos2d::extension::ScrollView::Direction::VERTICAL);
//Add Menu.
cocos2d::MenuItemImage *item0 = cocos2d::MenuItemImage::create("Images/PlayMenu/PlayMenuTile0.png",
"Images/PlayMenu/PlayMenuTile0.png", this, menu_selector(ScrollMenuScene::Menu_Handler));
_menu = cocos2d::Menu::create();
_menu->addChild(item0);
_menu->alignItemsVerticallyWithPadding(20);
_menu->setPosition(worldCenter);
this->addChild(_menu);
//add scroll view to layer.
this->addChild(_scrollView);
return true;
}
void ScrollMenuScene::Menu_Handler(cocos2d::Ref* sender)
{
//<Menu item tap implementation>
}
ScrollMenuScene::~ScrollMenuScene()
{
_scrollContainer->release();
}
cpp-empty-test
в каталогеtests
. Можешь попробовать. Туда включены все расширения вместе с путями поиска заголовков и библиотеками компоновщика. - person Vikas Patidar   schedule 27.08.2014