写在前面——有不对的地方,烦请大家批评指正,我也会继续努力提高自己。如果转载请注明出处,谢谢大家支持——Forward。
我的微博——秦京一梦
从这一篇,我们开始对Cocos2dx做一个基础系列的学习。
使用Cocos2dx进行游戏开发,Forward个人感觉就如同画画一样。一幅画要展现出来,就必须有至少一个载体,同样的,游戏中一个场景就是我们的一个载体。那么所谓的场景又是什么呢?带着这个问题,我们开始进入今天的主题——场景CCScene。
在之前的博客中Forward有提到过,按照自己的学习方法,在深入学习某一的新的知识点之前,总是要对整体上先做一个认识,这样对后期的学习会有很大的帮助。好的,为了有这样一个整体的认识,我们先来看看自上而下有关场景类CCScene的一个类结构。
图 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对象。然后调用AppDelegate的run来运行。
在AppDelegate的run函数中做了什么呢?
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)。
图 2
这里我们看到的CCTransition及文件内部的一些类,主要是与场景切换特效相关的一些使用类。如CCTransitionRotoZoom、CCTransitionJumpZoom等等。具体的API可以参考源代码,Forward在这里就不做赘述了。
进入HelloWord的关闭按钮回调函数,我们做如下修改。
CCScene*pTScene = TranslateScene::scene();
CCTransitionRotoZoom*pTranslateScene = CCTransitionRotoZoom::create(3.0f,pTScene);
CCDirector::sharedDirector()->replaceScene(pTranslateScene);
这里我们首先创建了一个前面自定义的一个类TranslateScene对象,然后通过CCTransitionRotoZoom类来完成场景的跳转(当然,我们需要包含对应头文件)。
看看执行结果来一个感性认识吧。直接运行程序——
图 3
点击右下角按钮,进行场景切换——
图 4
我们看到场景上的图片边旋转变缩小,知道看不见,然后TranlateScene场景显示的信息边旋转边放大直到刚好填充View窗口——
图 5
好的,今晚的基础学习就先到这吧。是不是很简单啊。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。