cocos2d-x学习(9)----大鱼吃小鱼(一)

        这个一个大鱼吃小鱼的游戏Demo,我们来按照游戏来解说代码。

       一进游戏,我们可以看到游戏的menu界面:

cocos2d-x学习(9)----大鱼吃小鱼(一)_第1张图片


详细代码:

HelloWorldScene.h

class HelloWorld : 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
	//NewGame 回调函数
	virtual void menuNewGameCallback(CCObject* pSender);

	// a selector callback
	//Option 回调函数
	virtual void menuOptionCallback(CCObject* pSender);

	//About 回调函数
	virtual void menuAboutCallback(CCObject* pSender);

    // a selector callback
	//Quit 回调函数
    void menuCloseCallback(CCObject* pSender);

    // implement the "static node()" method manually
    CREATE_FUNC(HelloWorld);
};

HelloWorldScene.cpp

CCScene* HelloWorld::scene()
{
    CCScene * scene = NULL;
    do 
    {
        // 'scene' is an autorelease object
        scene = CCScene::create();
        CC_BREAK_IF(! scene);

        // 'layer' is an autorelease object
        HelloWorld *layer = HelloWorld::create();
        CC_BREAK_IF(! layer);

        // add layer as a child to scene
        scene->addChild(layer);
    } while (0);

    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        //////////////////////////////////////////////////////////////////////////
        // super init first
        //////////////////////////////////////////////////////////////////////////

        CC_BREAK_IF(! CCLayer::init());
		
        //////////////////////////////////////////////////////////////////////////
        // add your codes below...
        //////////////////////////////////////////////////////////////////////////

		std::string titleStr = "Angry Fish";		
		//CCLabelTTF* pLable = CCLabelTTF::labelWithString(titleStr.c_str(),"Thonburi",30);
		CCLabelTTF* pLable = CCLabelTTF::create(titleStr.c_str(),"Thonburi",30);
		CC_BREAK_IF(!pLable);
		pLable->setColor(ccRED);
		CCSize winSize = CCDirector::sharedDirector()->getWinSize();
		pLable->setPosition(ccp(winSize.width/2,winSize.height*0.8f));
		this->addChild(pLable,1);


		//CCSprite* pSprite = CCSprite::spriteWithFile("bg01.jpg");
		CCSprite* pSprite = CCSprite::spriteWithFile("bg01.png");
		CC_BREAK_IF(!pSprite);
		//pSprite->setScaleX(winSize.width/pSprite->getContentSizeInPixels().width);
		pSprite->setScaleX(winSize.width/pSprite->getContentSize().width);
		//pSprite->setScaleY(winSize.height/pSprite->getContentSizeInPixels().height);
		pSprite->setScaleY(winSize.height/pSprite->getContentSize().height);
		pSprite->setPosition(ccp(winSize.width/2,winSize.height/2));
		this->addChild(pSprite,0);


		//游戏目录
		CCMenuItemFont::setFontName("Thonburi");
		CCMenuItemFont::setFontSize(25);
		std::string menuItemStr="NewGame";
		//CCMenuItemFont* newGame = CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,menu_selector(HelloWorld::menuNewGameCallback));
		CCMenuItemFont* newGame = CCMenuItemFont::create(menuItemStr.c_str(),this,menu_selector(HelloWorld::menuNewGameCallback));
		menuItemStr = "Option";
		//CCMenuItemFont* option = CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,menu_selector(HelloWorld::menuOptionCallback));
		CCMenuItemFont* option = CCMenuItemFont::create(menuItemStr.c_str(),this,menu_selector(HelloWorld::menuOptionCallback));
		menuItemStr = "About";
		//CCMenuItemFont* about = CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,menu_selector(HelloWorld::menuAboutCallback));
		CCMenuItemFont* about = CCMenuItemFont::create(menuItemStr.c_str(),this,menu_selector(HelloWorld::menuAboutCallback));
		menuItemStr = "Quit";
		//CCMenuItemFont* quit = CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,menu_selector(HelloWorld::menuCloseCallback));
		CCMenuItemFont* quit = CCMenuItemFont::create(menuItemStr.c_str(),this,menu_selector(HelloWorld::menuCloseCallback));
		
		CCMenu* menu = CCMenu::menuWithItems(newGame,option,about,quit,NULL);
		menu->setPosition(ccp(winSize.width/2,winSize.height/2));
		menu->alignItemsVertically();
		addChild(menu,1);

        bRet = true;
    } while (0);

    return bRet;
}

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    // "close" menu item clicked
    CCDirector::sharedDirector()->end();
}

void HelloWorld::menuOptionCallback(CCObject* pSender)
{
	CCScene* scene = SettingScene::scene();
	CCDirector::sharedDirector()->replaceScene(CCTransitionFlipX::transitionWithDuration(1.2f,scene));

}


void HelloWorld::menuNewGameCallback(CCObject* pSender)
{
	CCScene* scene = GameScene::scene();
	CCDirector::sharedDirector()->replaceScene(CCTransitionFlipX::transitionWithDuration(1.2f,scene));
}

void HelloWorld::menuAboutCallback(CCObject* pSender)
{
	//CCScene* scene = AboutScene::scene();
	CCScene* scene = AboutScene::scene();
	CCDirector::sharedDirector()->replaceScene(CCTransitionFlipX::transitionWithDuration(1.2f,scene));
}


关于界面:

cocos2d-x学习(9)----大鱼吃小鱼(一)_第2张图片


详细代码:

AboutScene.h

class AboutScene : public cocos2d::CCLayer
{
public:

	virtual bool init();
	static cocos2d::CCScene* scene();
	void backCallback(cocos2d::CCObject* pSender);
    // implement the "static node()" method manually
    CREATE_FUNC(AboutScene);
};

AboutScene.cpp

cocos2d::CCScene* AboutScene::scene()
{
	CCScene * scene = NULL;
	do 
	{
		// 'scene' is an autorelease object
		scene = CCScene::create();
		CC_BREAK_IF(! scene);

		// 'layer' is an autorelease object
		AboutScene* layer = AboutScene::create();
		CC_BREAK_IF(! layer);

		// add layer as a child to scene
		scene->addChild(layer);
	} while (0);

	// return the scene
	return scene;
}


bool AboutScene::init()
{
	bool bRet = false;
	do 
	{
		//init background
		CCSize winSize = CCDirector::sharedDirector()->getWinSize();

		CCSprite* pSprite = CCSprite::spriteWithFile("bg01.png");
		pSprite->setScaleX(winSize.width/pSprite->getContentSize().width);
		pSprite->setScaleY(winSize.height/pSprite->getContentSize().height);
		pSprite->setPosition(ccp(winSize.width/2,winSize.height/2));
		this->addChild(pSprite,0);

		std::string titleStr = "Angry Fish\n\n Write by Cocos2d-x\n\n Author:freeman";
		CCLabelTTF* pLable = CCLabelTTF::labelWithString(titleStr.c_str(),"Thonburi",30);
		CC_BREAK_IF(!pLable);
		pLable->setColor(ccBLUE);
		
		//pLable->setAnchorPoint(ccp(0,1));
		pLable->setPosition(ccp(winSize.width/2,winSize.height/2));
		this->addChild(pLable,1);


		std::string str;
		str="Back";
		//CCMenuItemFont* backMenu = CCMenuItemFont::itemFromString(str.c_str(),this,menu_selector(AboutScene::backCallback));
		CCMenuItemFont* backMenu = CCMenuItemFont::create(str.c_str(),this,menu_selector(AboutScene::backCallback));
		backMenu->setAnchorPoint(ccp(1,0));
		backMenu->setPosition(ccp(winSize.width,0));

		CCMenu* mn = CCMenu::menuWithItems(backMenu,NULL);
		mn->setPosition(ccp(0,0));
		this->addChild(mn,1);

		bRet = true;

	} while (0);
	return(bRet);
}


void AboutScene::backCallback(cocos2d::CCObject* pSender)
{
	CCScene * scene=HelloWorld::scene();
	CCDirector::sharedDirector()->replaceScene(CCTransitionFlipX::transitionWithDuration(1.2f,scene));
}

选项界面:

cocos2d-x学习(9)----大鱼吃小鱼(一)_第3张图片


详细代码:

global.h

extern bool g_isMusic;
extern bool g_isSound;

global.cpp

bool g_isSound = true;

bool g_isMusic = true;

SettingScene.h

class SettingScene :public cocos2d::CCLayer
{
public:
	virtual bool init();

	static cocos2d::CCScene* scene();

	void backCallback(cocos2d::CCObject* pSender);
	void soundCallback( cocos2d::CCObject *pSender );
	void musicCallback( cocos2d::CCObject *pSender );
	   
	//LAYER_NODE_FUNC(SettingScene);
	CREATE_FUNC(SettingScene);
};

SettingScene.cpp

cocos2d::CCScene* SettingScene::scene()
{
	CCScene * scene = NULL;
	do 
	{
		// 'scene' is an autorelease object
		scene = CCScene::create();
		CC_BREAK_IF(! scene);

		// 'layer' is an autorelease object
		SettingScene *layer = SettingScene::create();
		CC_BREAK_IF(! layer);

		// add layer as a child to scene
		scene->addChild(layer);
	} while (0);

	// return the scene
	return scene;
}


bool SettingScene::init()
{
	bool bRet = false;
	do 
	{
		CCSize winSize = CCDirector::sharedDirector()->getWinSize();

		CCSprite* pSprite = CCSprite::spriteWithFile("bg01.png");
		pSprite->setScaleX(winSize.width/pSprite->getContentSize().width);
		pSprite->setScaleY(winSize.height/pSprite->getContentSize().height);
		pSprite->setPosition(ccp(winSize.width/2,winSize.height/2));
		this->addChild(pSprite,0);



		CCMenuItemFont::setFontName("Thonburi");
		CCMenuItemFont::setFontSize(30);

		std::string str;
		str = "Music";
		//CCMenuItemFont *music = CCMenuItemFont::itemFromString(str.c_str(),NULL,NULL);
		CCMenuItemFont *music = CCMenuItemFont::create(str.c_str(),NULL,NULL);
		//music->setIsEnabled(false);
		music->setEnabled(false);

		str = "Open";
		//CCMenuItemFont *openMusic = CCMenuItemFont::itemFromString(str.c_str());
		CCMenuItemFont *openMusic = CCMenuItemFont::create(str.c_str());
		str = "Close";
		//CCMenuItemFont *closeMusic = CCMenuItemFont::itemFromString(str.c_str());
		CCMenuItemFont *closeMusic = CCMenuItemFont::create(str.c_str());
		CCMenuItemToggle *musicItem = CCMenuItemToggle::itemWithTarget(this,menu_selector(SettingScene::musicCallback),openMusic,closeMusic,NULL);
		musicItem->setSelectedIndex(g_isMusic?0:1);

		str = "Sound";
		//CCMenuItemFont *sound = CCMenuItemFont::itemFromString(str.c_str(),NULL,NULL);
		CCMenuItemFont *sound = CCMenuItemFont::create(str.c_str(),NULL,NULL);
		//sound->setIsEnabled(false);
		sound->setEnabled(false);

		str = "Open";
		//CCMenuItemFont *openSound = CCMenuItemFont::itemFromString(str.c_str());
		CCMenuItemFont *openSound = CCMenuItemFont::create(str.c_str());
		str = "Close";
		//CCMenuItemFont *closeSound = CCMenuItemFont::itemFromString(str.c_str());
		CCMenuItemFont *closeSound = CCMenuItemFont::create(str.c_str());

		CCMenuItemToggle *soundItem = CCMenuItemToggle::itemWithTarget(this,menu_selector(SettingScene::soundCallback),openSound,closeSound,NULL);
		soundItem->setSelectedIndex(g_isSound?0:1);

		str="Back";
		//CCMenuItemFont* back = CCMenuItemFont::itemFromString(str.c_str(),this,menu_selector(SettingScene::backCallback));
		CCMenuItemFont* back = CCMenuItemFont::create(str.c_str(),this,menu_selector(SettingScene::backCallback));

		CCMenu* menu = CCMenu::menuWithItems(music,musicItem,sound,soundItem,back,NULL);
		this->addChild(menu);
		menu->alignItemsInColumns(2,2,1);

		bRet = true;

	} while (0);
	return(bRet);
}

void SettingScene::backCallback(cocos2d::CCObject* pSender)
{
	CCScene* scene = HelloWorld::scene();
	CCDirector::sharedDirector()->replaceScene(CCTransitionFlipX::transitionWithDuration(1.2f,scene));
}

void SettingScene::soundCallback( cocos2d::CCObject *pSender )
{
	g_isSound=!g_isSound;
}

void SettingScene::musicCallback( cocos2d::CCObject *pSender )
{
	g_isMusic=!g_isMusic;
}


你可能感兴趣的:(cocos2d-x,大鱼吃小鱼)