热门标签 | 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


推荐阅读
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍如何在Vue项目中通过Element UI组件库实现对输入框占位符(placeholder)值的获取,以及数据绑定和查询的基本方法。文章将涵盖v-model双向绑定、el-form表单配置等核心内容。 ... [详细]
  • 本文介绍了如何使用 Python 的 Bokeh 库在图表上绘制菱形标记。Bokeh 是一个强大的交互式数据可视化工具,支持丰富的图形自定义选项。 ... [详细]
  • 本题要求将由小写字母组成的字符串划分为多个片段,确保每个字母只出现在一个片段中。目标是生成尽可能多的片段,并返回每个片段的长度列表。本文将详细解释问题描述、解题思路及代码实现。 ... [详细]
  • 本文介绍如何调整Element UI组件的边框样式,以确保内容与边框之间有足够的间距,并展示如何通过CSS实现更好的布局效果。 ... [详细]
  • 本文将介绍网易NEC CSS框架的规范及其在实际项目中的应用。通过详细解析其分类和命名规则,探讨如何编写高效、可维护的CSS代码,并分享一些实用的学习心得。 ... [详细]
  • Unity编辑器插件:NGUI资源引用检测工具
    本文介绍了一款基于NGUI的资源引用检测工具,该工具能够帮助开发者快速查找和管理项目中的资源引用。其功能涵盖Atlas/Sprite、字库、UITexture及组件的引用检测,并提供了替换和修复功能。文末提供源码下载链接。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • 本文介绍了如何使用 Python 的 Matplotlib 和 Pandas 库进行数据可视化。通过示例代码展示了折线图、柱状图和水平柱状图的创建方法,并解释了图表参数设置的具体细节。 ... [详细]
  • 利用生成对抗网络生成多标签离散电子健康记录
    本文探讨了通过生成对抗网络(GAN)生成合成电子健康记录(EHR)的方法,旨在解决隐私保护问题并促进医学研究。论文地址为:https://arxiv.org/abs/1703.06490v1。该方法通过生成高维离散变量的综合EHR数据,显著提升了医学研究中的数据可用性和安全性。 ... [详细]
  • 本文探讨了如何在iOS开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文介绍如何利用 Python 中的 NumPy 和 Matplotlib 库,从 NumPy 数组中绘制线图。通过具体的代码示例和详细解释,帮助读者理解并掌握这一技能。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
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社区 版权所有