//20秒后自动运行下一个场景
runAction( CCSequence::create(CCDelayTime::create(20.0f), CCCallFunc::create(this, callfunc_selector(GameOver::removeThis)),NULL)); void GameOver::removeThis() { nextCallback(this); }
.h文件
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" #include "Box2D/Box2D.h" #include "SimpleAudioEngine.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(); void menuCloseCallback(CCObject* pSender); void restartCallback(CCObject* pSender); void nextCallback(CCObject* pSender); void backCallback(CCObject* pSender); void Test(); CREATE_FUNC(HelloWorld); }; class Test1 : public HelloWorld { public: Test1(); }; class Test2 : public HelloWorld { public: Test2(); }; class Test3 : public HelloWorld { public: Test3(); }; #endif // __HELLOWORLD_SCENE_H__.cpp文件
#include "HelloWorldScene.h" using namespace cocos2d; CCLayer* nextSpriteTestAction(); CCLayer* backSpriteTestAction(); CCLayer* restartSpriteTestAction(); static int sceneIdx = -1; typedef CCLayer* (*NEWDRAWPRIMITIVESFUNC)(); #define DRAWPRIMITIVES_CREATE_FUNC(className) \ static CCLayer* create##className() \ { return new className(); } DRAWPRIMITIVES_CREATE_FUNC(Test1); DRAWPRIMITIVES_CREATE_FUNC(Test2); DRAWPRIMITIVES_CREATE_FUNC(Test3); static NEWDRAWPRIMITIVESFUNC createFunctions[] = { createTest1, createTest2, createTest3, }; #define MAX_LAYER (sizeof(createFunctions) / sizeof(createFunctions[0])) static CCLayer* nextAction() { sceneIdx++; sceneIdx = sceneIdx % MAX_LAYER; CCLayer* pLayer = (createFunctions[sceneIdx])(); pLayer->autorelease(); return pLayer; } static CCLayer* backAction() { sceneIdx--; int total = MAX_LAYER; if( sceneIdx < 0 ) sceneIdx += total; CCLayer* pLayer = (createFunctions[sceneIdx])(); pLayer->autorelease(); return pLayer; } static CCLayer* restartAction() { CCLayer* pLayer = (createFunctions[sceneIdx])(); pLayer->autorelease(); return pLayer; } void HelloWorld::restartCallback(cocos2d::CCObject *pSender) { if (sceneIdx != -1) { CCScene *s = new CCScene; s->addChild(restartAction()); CCDirector::sharedDirector()->replaceScene(s); s->release(); } } void HelloWorld::nextCallback(cocos2d::CCObject *pSender) { CCScene *s = new CCScene; s->addChild(nextAction()); CCDirector::sharedDirector()->replaceScene(s); s->release(); } void HelloWorld::backCallback(cocos2d::CCObject *pSender) { CCScene *s = new CCScene; s->addChild(backAction()); CCDirector::sharedDirector()->replaceScene(s); s->release(); } void HelloWorld::menuCloseCallback(CCObject* pSender) { CCDirector::sharedDirector()->end(); } 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 { CC_BREAK_IF(! CCLayer::init()); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF* l = CCLabelTTF::create("Test3333333", "Thonburi", 16); addChild(l); l->setPosition( ccp(s.width/2,s.height/2-100)); Test(); bRet = true; } while (0); return bRet; } void HelloWorld::Test() { CCSize s = CCDirector::sharedDirector()->getWinSize(); CCMenuItemImage *item1 = CCMenuItemImage::create("b1.png", "b2.png", this, menu_selector(HelloWorld::backCallback)); CCMenuItemImage *item2 = CCMenuItemImage::create("r1.png", "r2.png", this, menu_selector(HelloWorld::restartCallback)); CCMenuItemImage *item3 = CCMenuItemImage::create("f1.png", "f2.png", this, menu_selector(HelloWorld::nextCallback)); CCMenuItemImage *pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(HelloWorld::menuCloseCallback)); CCMenu *menu = CCMenu::create(item1, item2, item3,pCloseItem, NULL); menu->setPosition(CCPointZero); item1->setPosition(ccp(s.width/2 - item2->getContentSize().width*2, item2->getContentSize().height/2)); item2->setPosition(ccp(s.width/2, item2->getContentSize().height/2)); item3->setPosition(ccp(s.width/2 + item2->getContentSize().width*2, item2->getContentSize().height/2)); pCloseItem->setPosition(ccp(s.width - 20, s.height-20)); addChild(menu, 100); } Test1::Test1() { Test(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF* l = CCLabelTTF::create("Test1", "Thonburi", 16); addChild(l); l->setPosition( ccp(s.width/2,s.height/2)); } Test2::Test2() { Test(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF* l = CCLabelTTF::create("Test2", "Thonburi", 16); addChild(l); l->setPosition( ccp(s.width/2,s.height/2)); } Test3::Test3() { Test(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF* l = CCLabelTTF::create("Test3", "Thonburi", 16); addChild(l); l->setPosition( ccp(s.width/2,s.height/2)); }