温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

【Cocos2dx开发】场景

发布时间:2020-07-18 18:40:08 来源:网络 阅读:663 作者:龙颜硕 栏目:开发技术

Cocos2dx开发】场景

写在前面——有不对的地方,烦请大家批评指正,我也会继续努力提高自己。如果转载请注明出处,谢谢大家支持——Forward

我的微博——秦京一梦

从这一篇,我们开始对Cocos2dx做一个基础系列的学习。

使用Cocos2dx进行游戏开发,Forward个人感觉就如同画画一样。一幅画要展现出来,就必须有至少一个载体,同样的,游戏中一个场景就是我们的一个载体。那么所谓的场景又是什么呢?带着这个问题,我们开始进入今天的主题——场景CCScene

在之前的博客中Forward有提到过,按照自己的学习方法,在深入学习某一的新的知识点之前,总是要对整体上先做一个认识,这样对后期的学习会有很大的帮助。好的,为了有这样一个整体的认识,我们先来看看自上而下有关场景类CCScene的一个类结构。

【Cocos2dx开发】场景

1

上图1中,我们可以看出,CCScene是继承自CCLayer,而CCLayer则是由CCObject继承而来。同时由于CCLayer本身继承自CCTouchDelegate类,使其能够处理Touch事件。这样,就保证了CCScene能够在做游戏基本载体的基础上完成游戏过程中交互所必需的Touch事件的捕获与处理了。

那么Cocos2dx游戏开发中是如何使用CCScene的呢?

首先我们创建一个Cocos2dx工程,配置路径使之可以运行(Forward这里创建了一个SceneLayer工程),我们从程序的入口main文件看起。

   AppDelegate app;

   CCEGLView* eglView =CCEGLView::sharedOpenGLView();

   eglView->setFrameSize(480,320);


   intret = CCApplication::sharedApplication()->run();

这里我们注意到,程序一启动就定义了一个AppDelegate对象。然后调用AppDelegaterun来运行。

AppDelegaterun函数中做了什么呢?

   if(!applicationDidFinishLaunching())

   {

       return0;

   }

可能初学者会感觉比较绕,但是仔细看就会明白。SceneLayer工程中自定义了一个HelloWorld类,它是由CCLayer继承而来。并通过类内部的一个内部的静态变量CCScene作为游戏的主要载体来加载包括HelloWorld本身这个层以及其他游戏中的元素的。

我们进入AppDelegate.cpp中,就会发现,原来主场景的创建就在applicationDidFinishLaunching中。

   CCScene *pScene =HelloWorld::scene();


   // run

   pDirector->runWithScene(pScene);

这样就将一个场景CCScene载体创建出来了。(由于个人表达能力有限,或许在描述的过程中不够详细,希望大家能够去读源代码,可能会感觉更加清晰易懂)。

明白了这一点。我们也依样画葫芦,创建一个自己的场景TranslateScene出来。(为求简便,Forward只是对HelloWorld类进行复制简单修改并加入工程)。

创建这个场景用来做什么呢?其实这个例子的想法很简单,就是通过点击从一个场景切换到另外一个场景上去。这个过程中,Forward会选择使用Cocos2dx中现有的一些场景切换特效来完成,希望通过这一个例子对场景的切换一些特效做一些简单学习。

在这个例子中,我们主要使用的到的类如下(见图2)。

【Cocos2dx开发】场景

2

   这里我们看到的CCTransition及文件内部的一些类,主要是与场景切换特效相关的一些使用类。如CCTransitionRotoZoomCCTransitionJumpZoom等等。具体的API可以参考源代码,Forward在这里就不做赘述了。

进入HelloWord的关闭按钮回调函数,我们做如下修改。

   CCScene*pTScene = TranslateScene::scene();

   CCTransitionRotoZoom*pTranslateScene = CCTransitionRotoZoom::create(3.0f,pTScene);

   CCDirector::sharedDirector()->replaceScene(pTranslateScene);

   这里我们首先创建了一个前面自定义的一个类TranslateScene对象,然后通过CCTransitionRotoZoom类来完成场景的跳转(当然,我们需要包含对应头文件)。

   看看执行结果来一个感性认识吧。直接运行程序——

【Cocos2dx开发】场景

3

   点击右下角按钮,进行场景切换——

【Cocos2dx开发】场景

4

   我们看到场景上的图片边旋转变缩小,知道看不见,然后TranlateScene场景显示的信息边旋转边放大直到刚好填充View窗口——

【Cocos2dx开发】场景

5

   好的,今晚的基础学习就先到这吧。是不是很简单啊。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI