热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

[cocos2d-x]动作+场景切换

实现一个demo,具备以下功能:1.实现带一个参数或者两个参数的方法回调。2.实现按钮围绕屏幕转动。3.实现场景的切换(中间要有过渡场景,以

实现一个demo,具备以下功能:

1.实现带一个参数或者两个参数的方法回调。

2.实现按钮围绕屏幕转动。

3.实现场景的切换(中间要有过渡场景,以便实现前一个场景资源的释放)。

4.实现label的循环旋转+不停的来回移动。

效果图:

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(); CCCallFuncN *callFuncN = CCCallFuncN::create(this, callfuncN_selector(HelloWorld::funcN_CallBack)); pLabel->runAction(callFuncN); // 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); CCLabelTTF* pLabel2 = CCLabelTTF::create("hi", "Thonburi", 34); //带两个参数的回调 CCString *str = CCString::create("带两个参数的回调"); str->retain(); CCCallFuncND *callFuncND = CCCallFuncND::create(this,callfuncND_selector(HelloWorld::funcND_CallBack),str); //最后一个参数是void*可以是任意类型 pLabel2->runAction(callFuncND); pLabel2->setPosition(ccp(size.width / 2 + 20,40)); this->addChild(pLabel2,1); // add "HelloWorld" splash screen" CCSprite* pSprite = CCSprite::create("HelloWorld.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; } int i=0; void HelloWorld::menuCloseCallback(CCObject* pSender) { CCSize size = CCDirector::sharedDirector()->getWinSize(); CCMenuItem *item = (CCMenuItem *)pSender; /******舒缓动作********************************************************/ // CCActionInterval *action = CCMoveTo::create(2, ccp(20,size.height-20)); // item->runAction(action); /******先慢再快********************************************************/ // CCMoveTo *move = CCMoveTo::create(3, ccp(size.width-20, size.height-20)); // CCActionInterval *ease = CCEaseInOut::create(move, 4); // item->runAction(ease); /*******循环移动**********************************************************/ //float duration = CCRANDOM_0_1()*5+1; float duration = 0.1f; CCMoveTo *move1 = CCMoveTo::create(duration, ccp(20, 20)); CCMoveTo *move2 = CCMoveTo::create(duration,ccp(20, size.height-20)); CCMoveTo *move3 = CCMoveTo::create(duration, ccp(size.width - 20, size.height-20)); CCMoveTo *move4 = CCMoveTo::create(duration, ccp(size.width-20, 20)); CCSequence *sequence = CCSequence::create(move1,move2,move3,move4,NULL); //CCRepeatForever *repeat = CCRepeatForever::create(sequence); item->runAction(sequence); i++; //跳转 if (i==2) { //replease切换场景 // SecondScene *sense = SecondScene::create(); // CCScene *secScene = CCScene::create(); // secScene->addChild(sense,0); // CCDirector::sharedDirector()->replaceScene(secScene); //push切换场景 CCTransitionFade *secOndScene= CCTransitionFade::create(1.0f,SecondScene::scene(),ccGREEN); CCDirector::sharedDirector()->pushScene(secondScene); } } //回调函数 void HelloWorld::funcN_CallBack(void *sender) { CCLabelTTF *label = (CCLabelTTF *)sender; label->setString("带一个参数的回调"); CCLog("CallFuncN的回调"); } //带两个参数的回调 void HelloWorld::funcND_CallBack(void *sender,void *data) { CCString *str = (CCString *)data; CCLabelTTF *label = (CCLabelTTF *)sender; label->setString(str->getCString()); }

SecondScene.h:

#ifndef ___013_9_4___________SecondScene__ #define ___013_9_4___________SecondScene__  #include  #include "cocos2d.h" using namespace cocos2d; class SecondScene : public cocos2d::CCLayer { public:     // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)     virtual bool init();          // there's no 'id' in cpp, so we recommend to return the class instance pointer     static cocos2d::CCScene* scene();          // a selector callback     void menuCloseCallback(CCObject* pSender);          // preprocessor macro for "static create()" constructor ( node() deprecated )     CREATE_FUNC(SecondScene);      };  #endif /* defined(___013_9_4___________SecondScene__) */

SecondScene.cpp:

#include "SecondScene.h" #include "SimpleAudioEngine.h"  using namespace cocos2d; using namespace CocosDenshion;  CCScene* SecondScene::scene() {     // 'scene' is an autorelease object     CCScene *scene = CCScene::create();          // 'layer' is an autorelease object     SecondScene *layer = SecondScene::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 SecondScene::init() {     //////////////////////////////     // 1. super init first     if ( !CCLayer::init() )     {         return false;     }          CCMenuItemImage *pCloseItem = CCMenuItemImage::create(                                                           "CloseNormal.png",                                                           "CloseSelected.png",                                                           this,                                                           menu_selector(SecondScene::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);          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 / 2) );     pLabel->setAnchorPoint(ccp(0.5, 0.5));     pLabel->setTag(10);     // add the label as a child to this layer     this->addChild(pLabel, 1); } void SecondScene::menuCloseCallback(CCObject* pSender) { //        CCDirector::sharedDirector()->end(); //     //    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) //        exit(0); //    #endif          CCSize size = CCDirector::sharedDirector()->getWinSize();     CCMenuItem *item = (CCMenuItem *)pSender; /******舒缓动作********************************************************/     //    CCActionInterval *action = CCMoveTo::create(2, ccp(20,size.height-20));     //    item->runAction(action);      /******先慢再快********************************************************/     //    CCMoveTo *move = CCMoveTo::create(3, ccp(size.width-20, size.height-20));     //    CCActionInterval *ease = CCEaseInOut::create(move, 4);     //    item->runAction(ease);           /*******循环移动**********************************************************/     //float duration = CCRANDOM_0_1()*5+1;     float duration = 0.1f;     CCMoveTo *move1 = CCMoveTo::create(duration, ccp(20, 20));     CCMoveTo *move2 = CCMoveTo::create(duration,ccp(20, size.height-20));     CCMoveTo *move3 = CCMoveTo::create(duration, ccp(size.width - 20, size.height-20));     CCMoveTo *move4 = CCMoveTo::create(duration, ccp(size.width-20, 20));     CCSequence *sequence = CCSequence::create(move1,move2,move3,move4,NULL);     CCRepeatForever *repeat = CCRepeatForever::create(sequence);     item->runAction(repeat);               CCLabelTTF *label = (CCLabelTTF *)this->getChildByTag(10);     CCRotateBy *rotateBy = CCRotateBy::create(8, 360);     CCMoveTo *move11 = CCMoveTo::create(2, ccp(0, size.height/2));     CCMoveTo *move13 = CCMoveTo::create(2, ccp(size.width, size.height/2));     CCMoveTo *move12 = CCMoveTo::create(2, ccp(size.width/2, size.height/2));     CCSequence *sequence1 = CCSequence::create(move11,move12,move13,move12,NULL);     CCSpawn *span = CCSpawn::create(sequence1,rotateBy,NULL);     CCRepeatForever *repeat1 = CCRepeatForever::create(span);     label->runAction(repeat1);   }

资源文件:http://download.csdn.net/detail/s10141303/6214883


推荐阅读
  • macOS SwiftUI 组件之 实用下拉菜单 (教程含源码)
    macOS SwiftUI 组件之 实用下拉菜单 (教程含源码) ... [详细]
  • Vue 实现表格分页功能详解
    本文将详细介绍如何在 Vue 中实现表格的分页功能,包括代码示例和具体实现步骤,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 2012-06-0821:26:42  用matlab来建模,仿真不同时刻ostask在队列中的装载情况。输入参数如下作为初学者,M文件写的有点长。能实现功能就算学以致用了。cle ... [详细]
  • 使用多项式拟合分析淘宝双11销售趋势
    根据天猫官方数据,2019年双11成交额达到2684亿元,再次刷新历史记录。本文通过多项式拟合方法,分析并预测未来几年的销售趋势。 ... [详细]
  • JComponentJLabel的setBorder前言用例2205262241前言setBorder(Border边框)实现自JComponentjava.awt.Insets ... [详细]
  • 本文介绍了如何使用 ECharts 和高德地图实现散点图,并解决视觉映射组件点击后出现的错乱问题。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • poj 3352 Road Construction ... [详细]
  • 本文将详细介绍如何在Webpack项目中安装和使用ECharts,包括全量引入和按需引入的方法,并提供一个柱状图的示例。 ... [详细]
  • 利用REM实现移动端布局的高效适配技巧
    在移动设备上实现高效布局适配时,使用rem单位已成为一种流行且有效的技术。本文将分享过去一年中使用rem进行布局适配的经验和心得。rem作为一种相对单位,能够根据根元素的字体大小动态调整,从而确保不同屏幕尺寸下的布局一致性。通过合理设置根元素的字体大小,开发者可以轻松实现响应式设计,提高用户体验。此外,文章还将探讨一些常见的问题和解决方案,帮助开发者更好地掌握这一技术。 ... [详细]
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 本文汇集了我在网络上搜集以及在实际面试中遇到的前端开发面试题目,并附有详细解答。无论是初学者还是有一定经验的开发者,都应深入理解这些问题背后的原理,通过系统学习和透彻研究,逐步形成自己的知识体系和技术框架。 ... [详细]
author-avatar
最好的冥羽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有