I’m starting at ground zero with Android after years of programming with iOS and cocos2d-iphone. I am having a hard time adjusting to Eclipse to far since it really seems to be light-years a part from xcode.
I finally got my Hello World project working with cocos2d-x, but now I want to add another scene and call it out in the Appdelegate. How do I go about doing this? In Xcode, I would just add the template file, but in Eclipse I get the sense that I am missing something. What I’ve done so far is right click on Classes and make a new source C*+ file and a new C*+ header file (is that right?). Then I copied the HelloworldScene.cpp and HelloWorldScense.h files into my MainMenuScene.cpp and MainMenuScene.h files…
MainMenuScene.h
#ifndef MAINMENUSCENE_H_
#define MAINMENUSCENE_H_
#include "cocos2d.h"
class MainMenu : public cocos2d::CCLayer
{
public:
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
// there's no 'id' in cpp, so we recommand to return the exactly class pointer
static cocos2d::CCScene* scene();
// a selector callback
void menuCloseCallback(CCObject* pSender);
// implement the "static node()" method manually
CREATE_FUNC(MainMenu);
};
#endif // MAINMENUSCENE_H_
MainMenuScene.cpp
#include "MainMenuScene.h"
#include "SimpleAudioEngine.h"
using namespace cocos2d;
using namespace CocosDenshion;
CCScene* MainMenu::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// 'layer' is an autorelease object
MainMenu *layer = MainMenu::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 MainMenu::init()
{
//////////////////////////////
// 1. super init first
if ( !CCLayer::init() )
{
return false;
}
/////////////////////////////
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.
// add a "close" icon to exit the progress. it's an autorelease object
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(MainMenu::menuCloseCallback) );
pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
// create menu, it's an autorelease object
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition( CCPointZero );
this->addChild(pMenu, 1);
/////////////////////////////
// 3. add your codes below...
// add a label shows "Hello World"
// create and initialize a label
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Thonburi", 34);
// ask director the window size
CCSize size = CCDirector::sharedDirector()->getWinSize();
// position the label on the center of the screen
pLabel->setPosition( ccp(size.width / 2, size.height - 20) );
// add the label as a child to this layer
this->addChild(pLabel, 1);
// add "HelloWorld" splash screen"
CCSprite* pSprite = CCSprite::create("Domino-Table.png");
// position the sprite on the center of the screen
pSprite->setPosition( ccp(size.width/2, size.height/2) );
// add the sprite as a child to this layer
this->addChild(pSprite, 0);
return true;
}
void MainMenu::menuCloseCallback(CCObject* pSender)
{
CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
When I change
CCScene *pScene = HelloWorld::scene();
to
CCScene *pScene = MainMenu::scene();
in my appdelegate.cpp file, I get a fatal error saying that MainMenu is an undefined reference. What have I done wrong?