cocos2d-x 弹入、弹出效果(以菜单为例子)
来源:互联网 发布:c语言入门看什么书 编辑:程序博客网 时间:2024/05/12 11:31
弹入和弹出菜单为了使动作更平滑,涉及到动作组合。(CCMoveTo 、CCEaseExponentialOut)(菜单背景图位置仅为示范例子,还需调整)
以菜单的背景图为例:
//生成菜单背景图CCSprite* MainMenuBG = CCSprite::create("menu_bg.png");MainMenuBG->setPosition(ccp(visibleSize.width/2 +10,visibleSize.height +20));this->addChild(MainMenuBG,0);MainMenuBG->setTag(menu_bg_tag);//定义背景层 弹入弹出//MainMenuBG MoveoutCCMoveTo* MainMenuBGMoveout = CCMoveTo::create(3.0f,ccp(visibleSize.width/2,visibleSize.height/2));CCEaseExponentialOut* MainMenuBGExponentialOut = CCEaseExponentialOut::create(MainMenuBGMoveout);//MainMenuBG MoveinMainMenuBG = (CCSprite*)this->getChildByTag(menu_bg_tag);CCPoint MainMenuBGHidepoint = ccp(visibleSize.width/2,visibleSize.height + MainMenuBG->getContentSize().height/2);CCMoveTo* MainMenuBGMovein=CCMoveTo::create(3.0f,MainMenuBGHidepoint);CCEaseExponentialIn* MainMenuBGExponentialIn = CCEaseExponentialIn::create(MainMenuBGMovein);//调用顺序复合动作CCRepeatForever* rept0= CCRepeatForever::create(CCSequence::create(MainMenuBGExponentialOut,MainMenuBGExponentialIn,NULL));MainMenuBG->runAction(rept0);
==================
源码如下:
//////////////////////////////////////////////*HelloWorldScene.h*/#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__#include "cocos2d.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 recommend returning the class instance pointer static cocos2d::CCScene* scene(); // a selector callback void menuCloseCallback(CCObject* pSender);//定义菜单项bool MainMenu(); // implement the "static node()" method manually CREATE_FUNC(HelloWorld);};#endif // __HELLOWORLD_SCENE_H__///////////////////////////////////////////////////////////////////* HelloWorldScene.cpp */#include "HelloWorldScene.h"USING_NS_CC;enum{menu_pause_tag =1,menu_bg_tag=2};CCScene* HelloWorld::scene(){ // 'scene' is an autorelease object CCScene *scene = CCScene::create(); // 'layer' is an autorelease object HelloWorld *layer = HelloWorld::create(); scene->addChild(layer,999); // return the scene return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){ ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->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 CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 , origin.y + pCloseItem->getContentSize().height/2)); // 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...//调用菜单MainMenu(); return true;}void HelloWorld::menuCloseCallback(CCObject* pSender){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");#else CCDirector::sharedDirector()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0);#endif#endif}bool HelloWorld::MainMenu(){CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();////设定菜单项 MenuItemCCMenuItemImage *item0 = CCMenuItemImage::create("menu_restart_normal_CN.png","menu_restart_pressed_CN.png",this,menu_selector(HelloWorld::menuCloseCallback));//MenuItem 1CCMenuItemImage *item1 = CCMenuItemImage::create("menu_resume_normal_CN.png","menu_resume_pressed_CN.png",this,menu_selector(HelloWorld::menuCloseCallback));//MenuItem 2CCMenuItemImage *item2 = CCMenuItemImage::create("menu_quit_normal_CN.png","menu_quit_pressed_CN.png",this,menu_selector(HelloWorld::menuCloseCallback));//MenuItem 3CCMenuItemImage *item3 = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(HelloWorld::menuCloseCallback));//根据菜单项生成主菜单CCMenu *MainMenu = CCMenu::create(item0,item1,item2,item3,NULL);MainMenu->alignItemsVerticallyWithPadding(15.0f);MainMenu->setPosition(ccp(visibleSize.width/2,visibleSize.height));MainMenu->setTag(menu_pause_tag);this->addChild(MainMenu,1);//生成菜单背景图CCSprite* MainMenuBG = CCSprite::create("menu_bg.png");MainMenuBG->setPosition(ccp(visibleSize.width/2 +10,visibleSize.height +20));this->addChild(MainMenuBG,0);MainMenuBG->setTag(menu_bg_tag);//定义弹出 菜单弹入弹出效果//MainMenu moveoutCCMoveTo* MainMenuMoveOut = CCMoveTo::create(3.0f,ccp(visibleSize.width/2,visibleSize.height/2));CCEaseExponentialOut* MainMenuExponentialOut = CCEaseExponentialOut::create(MainMenuMoveOut);//MainMenu moveinMainMenu = (CCMenu*)this->getChildByTag(menu_pause_tag);CCPoint MainMenuHidepoint = ccp(visibleSize.width/2,visibleSize.height + MainMenu->getContentSize().height/2);CCMoveTo* MainMenuMovein=CCMoveTo::create(3.0f,MainMenuHidepoint);CCEaseExponentialIn* MainMenuExponentailIn = CCEaseExponentialIn::create(MainMenuMovein);////定义背景层 弹入弹出//MainMenuBG MoveoutCCMoveTo* MainMenuBGMoveout = CCMoveTo::create(3.0f,ccp(visibleSize.width/2,visibleSize.height/2));CCEaseExponentialOut* MainMenuBGExponentialOut = CCEaseExponentialOut::create(MainMenuBGMoveout);//MainMenuBG MoveinMainMenuBG = (CCSprite*)this->getChildByTag(menu_bg_tag);CCPoint MainMenuBGHidepoint = ccp(visibleSize.width/2,visibleSize.height + MainMenuBG->getContentSize().height/2);CCMoveTo* MainMenuBGMovein=CCMoveTo::create(3.0f,MainMenuBGHidepoint);CCEaseExponentialIn* MainMenuBGExponentialIn = CCEaseExponentialIn::create(MainMenuBGMovein);//调用弹入 弹出动作CCRepeatForever* rept1= CCRepeatForever::create(CCSequence::create(MainMenuExponentialOut,MainMenuExponentailIn,NULL));MainMenu->runAction(rept1);CCRepeatForever* rept0= CCRepeatForever::create(CCSequence::create(MainMenuBGExponentialOut,MainMenuBGExponentialIn,NULL));MainMenuBG->runAction(rept0);return true;}
0 0
- cocos2d-x 弹入、弹出效果(以菜单为例子)
- Cocos2d-x 火焰例子效果
- Cocos2d-x 带冷却效果的菜单按钮CCMenuItem
- cocos2d-x 3.3rc0 实现Win8菜单效果
- cocos2d-x菜单
- cocos2d-x 菜单项
- cocos2d-x菜单项
- cocos2d-x CCMenu 菜单
- cocos2d-x:菜单项
- Cocos2d-x文本菜单
- Cocos2d-X中的菜单
- COCOS2D-X在给弹出框加入弹出效果过程中遇到的问题以及解决办法
- cocos2D中实现滑动菜单CCScrollView+CCMenu效果,(注意不是cocos2D-x)!!
- cocos2d-x橡皮擦效果---
- cocos2d-x 手电筒效果
- Cocos2d-x粒子效果
- Cocos2d-x 抖动效果
- cocos2d-x 手电筒效果
- STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例
- cocos2dx 3.2版本获得精灵缩放后的尺寸大小
- 你理解我的意思么?
- 中国顶级黑客的生意—---在商业利益与社会责任间两难抉择
- STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
- cocos2d-x 弹入、弹出效果(以菜单为例子)
- 项目准备
- HDU - 1002 A + B Problem II
- 指针高级的应用
- python 笔记一 numpy,pylab
- 【呆子谈营销】:说说那些热点事情之后的借势营销
- Linux下动态库(.so)和静态库(.a) 的区别
- SecureCRT进入全屏和退出全屏
- Car race game 归并排序求逆序数