cocos2d-x3.0学习之场景切换代码
HelloWorldScene.h #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::Layer { 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();
// a selector callback void menuCloseCallback(cocos2d::Ref* pSender);
// implement the "static create()" method manually CREATE_FUNC(HelloWorld); void HelloWorld::menujumpCallback(cocos2d::Ref* pSender); cocos2d::Scene*createfirst(); void HelloWorld::menureturn(cocos2d::Ref*pSender); }; #endif // __HELLOWORLD_SCENE_H__ ======================================================================================== HelloWorldScene.cpp #include "HelloWorldScene.h" USING_NS_CC; Scene* HelloWorld::createScene() { // 'scene' is an autorelease object auto scene = Scene::create();
// 'layer' is an autorelease object auto layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } void HelloWorld::menureturn(cocos2d::Ref*pSender) { auto ss=HelloWorld::createScene(); auto ts=TransitionZoomFlipY::create(1.0f,ss); Director::getInstance()->replaceScene(ts);
} Scene*HelloWorld::createfirst() { auto s=Scene::create(); auto layer=LayerColor::create(Color4B(100,10,128,128)); auto sprite=Sprite::create("bg.png"); layer->addChild(sprite); auto l=LabelTTF::create("Welcome to play game","Arial",25); auto d=Director::sharedDirector()->getWinSize(); auto width=d.width/2; auto height=d.height/2; l->setPosition(Point(width,height)); layer->addChild(l); //create menu auto returnmenu=MenuItemImage::create("leaf.png","icon.png",CC_CALLBACK_1(HelloWorld::menureturn,this)); returnmenu->setPosition(Point(400,400)); auto mm=Menu::create(returnmenu,NULL); mm->setPosition(Point(400,400)); s->addChild(layer); return s; } // on "init" you need to initialize your instance bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !Layer::init() ) { return false; }
Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); ///////////////////////////// // 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 auto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2, origin.y + closeItem->getContentSize().height/2)); // create menu,it's an autorelease object auto menu = Menu::create(closeItem,NULL); menu->setPosition(Vec2::ZERO); auto click=MenuItemImage::create("hagar1.png","hagar2.png",CC_CALLBACK_1(HelloWorld::menujumpCallback,this)); click->setPosition(Point(100,100)); auto m=Menu::create(click,NULL); m->setPosition(Vec2::ONE); this->addChild(menu,1); this->addChild(m,1);
auto label = LabelTTF::create("cocos2d-x game",30);
// position the label on the center of the screen label->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height - label->getContentSize().height)); // add the label as a child to this layer this->addChild(label,1); // add "HelloWorld" splash screen" auto sprite = Sprite::create("HelloWorld.png"); // position the sprite on the center of the screen sprite->setPosition(Vec2(visibleSize.width/2 + origin.x,visibleSize.height/2 + origin.y)); // add the sprite as a child to this layer this->addChild(sprite,0);
return true; } void HelloWorld::menujumpCallback(Ref* pSender) { auto scene=HelloWorld::createfirst(); auto s2=TransitionZoomFlipY::create(1.0f,scene); Director::getInstance()->replaceScene(s2); } //导演类的结束方法 void HelloWorld::menuCloseCallback(Ref* pSender) { #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert"); return; #endif Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0); #endif } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |