Cocos2d-x如何添加新场景及切换新场景(包括场景特效)

做了一天多的工作终于把此功能搞定了,实际上添加新场景花费不了多少时间,时间主要花在切换到另一个场景的实现上,主要原因是编译时出现了一个错误,百思不得其解,后来经过查资料不断摸索才知道自己问题的所在,改正了错误编译通过,实现了我想要的结果,看着那个场景切换的自由和切换过程中各种特效的绚丽,看在眼里,乐在心里。

下面开始我的探索之路:

首先新建一个场景,其实你可以参考HelloWorld场景建立自己的场景,当然你在新的场景里实现的功能由你自己来定,下面贴上我的新建场景代码:

SecondScene.h:

 1 #include "cocos2d.h"
 2
 3 class SecondScene : public cocos2d::Layer
 4 {
 5 public:
 6     static cocos2d::Scene* createScene();
 7     virtual bool init();
 8     void menuCloseCallback(cocos2d::Ref* pSender);
 9     CREATE_FUNC(SecondScene);
10 };  
 1 #include "SecondScene.h"
 2 #include "HelloWorldScene.h"
 3 USING_NS_CC;
 4
 5 Scene* SecondScene::createScene()
 6 {
 7     auto scene = Scene::create();
 8     auto layer = SecondScene::create();
 9     scene->addChild(layer);
10     return scene;
11 }
12
13 bool SecondScene::init()
14 {
15
16     if ( !Layer::init() )
17     {
18         return false;
19     }
20
21     Size visibleSize = Director::getInstance()->getVisibleSize();
22     Vec2 origin = Director::getInstance()->getVisibleOrigin();
23     auto closeItem = MenuItemImage::create(
24                                            "CloseNormal.png",
25                                            "CloseSelected.png",
26                                            CC_CALLBACK_1(SecondScene::menuCloseCallback, this));
27
28     closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
29                                 origin.y + closeItem->getContentSize().height/2));
30
31     auto menu = Menu::create(closeItem, NULL);
32     menu->setPosition(Vec2::ZERO);
33     this->addChild(menu, 1);
34
35     auto label = LabelTTF::create("Hello World world", "Arial", 24);
36
37     label->setPosition(Vec2(origin.x + visibleSize.width/2,
38                             origin.y + visibleSize.height - label->getContentSize().height));
39
40     this->addChild(label, 1);
41
42     auto sprite = Sprite::create("HelloWorld.png");
43
44     sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
45
46     this->addChild(sprite, 0);
47
48     return true;
49 }
50
51
52 void SecondScene::menuCloseCallback(Ref* pSender)
53 {
54 CCScene* s = HelloWorld::createScene();
55 Director::sharedDirector()-       >replaceScene(CCTransitionFlipX::create(2.0f,s));
56 }

在HelloWorld.cpp中修改HelloWorld::menuCloseCallback(Ref * pSender)

1 void HelloWorld::menuCloseCallback(Ref* pSender)
2 {
3     CCScene* secondScene = SecondScene::createScene();
4     Director::sharedDirector()->pushScene(CCTransitionJumpZoom::create(2.0f,secondScene));
5 }

到此,创建新场景完成,下面就是编译运行切换到新的场景中实现切换的特效。

在编译过程中我遇到个问题如下,这个问题费了很长时间才解决。

jni/../../Classes/HelloWorldScene.cpp:118: error: undefined reference to ‘SecondScene::createScene()‘
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [obj/local/armeabi/libcocos2dcpp.so] Error 1

解决方法是:加入每个新场景都要先注册一下,找到jni-->Classes目录下的Android.mk文件,加入新的场景文件SecondScene.cpp

1 LOCAL_SRC_FILES := hellocpp/main.cpp 2                    ../../Classes/AppDelegate.cpp 3                    ../../Classes/HelloWorldScene.cpp 4                    ../../Classes/SecondSce
重新编译通过,点击场景的菜单即可实现切换特效效果。
时间: 2024-11-03 02:05:53

Cocos2d-x如何添加新场景及切换新场景(包括场景特效)的相关文章

3.cocos2dx之Menu,通过menu来实现场景的切换

 1 头文件 TMenu.h #ifndef __TMENU_H__ #define __TMENU_H__ #include "cocos2d.h" USING_NS_CC; class TMenu :public CCLayer { public: static CCScene * scene(); CREATE_FUNC(TMenu); bool init(); CCMenu * menu; void menuCallback(CCObject * sender); void

cocos2dx 场景的切换

我们知道cocos2dx中可以由多个场景组成,那么我是如何来切换场景的呢 首先我们先新建一个新的场景类,我推荐的方式是,在你工程的目录中找到一个classes的文件夹,里面有AppDelegate.cpp和AppDelegate.h还有HelloWorldScene.cpp和HelloWorldScene.h,我们需要做的就是把HelloWorldScene.cpp和HelloWorldScene.h复制在当前文件夹下,然后把HelloWorldScene中一些东西修改 例如我要新建一个Game

cocos2dx 3.1从零学习(二)——菜单、场景切换、场景传值

回顾一下上一篇的内容,我们已经学会了创建一个新的场景scene,添加sprite和label到层中,掌握了定时事件schedule.我们可以顺利的写出打飞机的主场景框架. 上一篇的内容我练习了七个新场景,每一个场景都展示不同的东西,像背景定时切换.各种字体的随机颜色和位置等.每次要切换一个场景都要修改AppDelegate中的调用代码,非常的不方便查看,这一篇我们写场景的切换.每当我们创建一个新的场景的时候只要添加对应按钮到主界面,点击即可以切换过去查看对应的效果.这个有点类似官方提供的cppt

09.spritekit征程——场景的切换

09.spritekit征程--场景的切换 上文讲到咱们的小精灵(sprite)在场景中"舞动",枯燥的学习似乎有了那么点意思.我相信各位看官都是想自己开发一款独有的游戏,自然就少不了绚丽的效果以及开场.因此今天咱们来对场景之间的切换进行入门. Sprite Kit对场景之间的切换简单到爆.在下面的例子当中,我们将创建第二个场景来学习其他游戏特性.前面的动画效果最终会导致"Hello World"文本从屏幕淡出,但这仅仅只发生在当然场景中.今天我们的任务是当文本消失

cocos 中熟练运用场景的切换

在实际游戏运用中,一个场景是远远不够的,我们必须要掌握多个场景之间的切换. 场景切换时通过Director导演类来实现的,在cocos中定义了如下几种场景切换函数: 1,void runWithScene(Scene *scene).这是一个运行场景的函数,该函数的使用情况是当前没有场景正在运行,因为一次只能运行一个场景. 2,void replaceScene(Scene *scene).   这是第一种用来切换到另一个场景的函数,用一个新的场景来代替当前场景,当前场景则会被终端释放. 3,v

iOS Sprite Kit教程之场景的切换

iOS Sprite Kit教程之场景的切换 Sprite Kit中切换场景 每一个场景都不是单独存在的.玩家可以从一个场景中切换到另外一个场景中.本小节,我们来讲解场景切换.在每一个游戏中都会使用到场景与场景的切换功能,例如,在街机原始人游戏中,选择关卡这一场景中,可以看到有4关,这四关分别代表了4个场景,如图2.20所示. 图2.20  街机原始的关卡选择 当玩家选择第一关时,就会由选择关卡的场景跳转到第一关的场景中,如图2.21所示. 图2.21  第一关的场景 当玩家选择第二关时,就会由

用jQuery.touchSwipe插件实现手机端场景滑动切换效果

使用jQuery的touchSwipe插件监听触摸滑动事件,结合css3实现手机端场景滑动切换效果.最好在手机端测试代码,也可以在PC端用鼠标点击模拟滑动. 1.html代码: <div class="container"> <div class="page page0 page_current"> <h1>你好,我是0号屏幕,第一屏,鼠标单击向下/向上拖动</h1> </div> <div clas

cocos2d-x场景效果切换

Cocos2d-x提供了很多场景间切换的效果 1.使用方法: ccTime t = 1.2;    CCScene * pScene = CCScene::node();    CCLayer *pLayer = new book_page1();    pLayer->autorelease();    pScene->addChild(pLayer);    CCTransitionFade* transitionScene = CCTransitionFade::transitionWi

HTML5新标签解释及其使用场景

我们来看一下HTML 5提供的一些新的标签用法和HTML 4的区别 <article> 标签定义外部的内容.比如来自一个外部的新闻提供者的一篇新的文章,或者来自 blog 的文本,或者是来自论坛的文本,亦或是来自其他外部源内容.HTML5:<article></article>HTML4:<div></div> <aside> 标签定义 article 以外的内容:aside 的内容应该与 article 的内容相关.HTML5:&l