Cocos2d-x学习笔记(三) 实现简单的场景切换

来源:互联网 发布:windows找不到social 编辑:程序博客网 时间:2024/06/15 16:24

  从这一篇开始差不多算正式进入代码编写阶段了,虽然都是一些简单的小功能,不过再复杂的游戏也都是由这些小功能组成的。这篇将学习简单的场景切换。

  说到场景切换那肯定是需要有多个场景才能实现切换,而我们的项目里貌似只有HelloWorldScene这一个场景,那么就需要我们再创建一个场景。只是怎么创建场景呢?相信很多同学都会想到既然HelloWorldScene是一个场景,那么再写一个HelloWorldScene出来不就是了?答案也确实如此,只不过我当时脑子没转过来,纠结了好半天也没想到怎么创建,后来就用了最笨的方法把HelloWorldScene.cppHelloWorldScene.h复制一下换个名字,居然还就蒙对了,果然有时候不能想太多…

  我创建的新场景是MyScene,将.cpp.h里面所有写着HelloWorldScene全部改成MySceneOK了。(这里最好在MyScene场景中做一些区别,不然与HelloWorldScene界面一模一样了)

  现在有了两个场景了,就可以实现场景切换了。在什么情况下切换呢?其他的事件我们现在都没接触过,那就用前一篇笔记中提到的图片按钮回调函数来实现吧。

  首先创建一个图片按钮(这个代码就不写了之前学到过,你也可以直接用默认的那个关闭按钮),我将它命名为pReplaceItem,然后写一个带有切换场景功能的回调函数(偷懒的同学可以把原本的关闭函数注释,直接在里面写切换场景的实现代码)

void HelloWorld::menuReplaceScene(CCObject* pSender){// 清空缓存CCDirector::sharedDirector()->purgeCachedData();CCScene *pScene = MyScene::scene();CCDirector::sharedDirector()->replaceScene(CCTransitionJumpZoom::create(1,pScene));}

  OK,代码就这么简单。不过还是需要解释下,第一句代码是先将缓存清空,也就是先现在的场景清掉。接着创建一个新的场景,也就是我们之前写好的MyScene场景,看到这句代码大家应该就理解了之前的CCScene* HelloWorld::scene()函数是什么意思了吧,没错就是返回HelloWorld类的场景。(顺便提一下,看了.h文件会知道不管是HelloWorld类还是MyScene类他们都继承自CCLayer类也就是说他们是个布景层,什么是布景层呢?这个以后会了解到现在就不提了。)

 最后就是将新建的场景替换掉旧场景的方法了:CCDirector::sharedDirector()->replaceScene(CCScene *pScene)

  这里有个CCTransitionJumpZoom,他又是什么呢?是切换场景的方式,我所用的这个切换效果是跳跃式,原场景先缩小,然后新场景跳跃进来。场景切换效果有很多很多种,我这里就不一一写出来了,有兴趣的同学可以去查查API,我上次推荐的那本《Cocos2d-x权威指南》里面也有详细的说明。

  毕竟只是个简单的场景切换效果,需要写的代码就这么多了,那么运行看看结果吧。(在这里我遇到了一个小问题,代码运行的时候编译器总说找不到MyScene.cpp,我上网查了,网上的解决方法各异但是都看起来很复杂,所以我决定自己先试试,最后才发现原来MyScene的两个文件被默认存在了win32的文件夹中,而我们的HelloWorldScene是放在Classes文件中,所以大家创建文件的时候注意一下路径)

图片中的play就是我刚才创建的图片按钮啦,现在我来点击看看是否成功切换场景

效果实现啦,这种跳跃的截图需要技术,大家知道意思就OK- -

很简单是不是?

0 0
原创粉丝点击