您的位置:首页 > 移动开发 > Cocos引擎

Cocos2D-x for XNA类解析(1): CCApplication

2013-11-10 22:21 295 查看
转自:http://www.cnblogs.com/hielvis/archive/2012/06/04/2534672.html

Windows phone上最好的游戏引擎cocos2d-x for XNA发布也有几个月了,作为移植团队我们一直没有时间献上一些教程,现在我们要开始了,打开你的Visual Studio,我们开始学习吧!

   这系列教程我会讲解分析大部分开发者会用到的cocos2d-x for XNA的常用类的功能及用法,带些示例代码,更多的交流请加我们的QQ群,在文章末尾:

 

   大部分框架,基本上都可以分为两部分:

      1. 一个入口主类,它定义了整个应用程序的生命周期,并提供一些全局的资源

      2. 一些绘制到屏幕上的“页面”控件。

   如果大家熟悉Silverlight for Windows phone,知道这个入口主类就是Application,它订阅并处理WP应用程序的生命周期事件,并定义系统资源。

   而这些页面控件就是Silverlight for Windows phone应用程序中的PhoneApplicationPage。它定义了一个一个的页面外观。

   有了这个基础,我们来看Cocos2D,我们发现它们的情形惊人的一致:CCApplication作为应用程序的入口,负责调控引擎的整个生命周期。而PhoneApplicationPage则对应cocos2d中的CCScene,是的,正如Wp应用程序每时每刻会显示一个页面一样,cocos2d每时每刻会显示一个CCScene。 

 
   其实这也不奇怪,图形应用程序大多是这样的思路,只不过游戏轮询的模式更适应于游戏频繁的逻辑和状态更新,而事件的模式适应于开发用户输入驱动的应用程序。

   所以,在cocos2d中,CCApplication主要做三件事情:

            1.    控制应用程序的生命周期

            2.    提供和管理一些全局的资源

     3. 处理Touch

     4. 循环绘制界面

 
   应用程序的生命周期有一下几个虚方法:

     /// <summary>
[align=left]      /// 可以做一些简单全局变量的初始化工作,在DrawableGameComponent的Initialize方法中调用[/align]
[align=left]      /// </summary>[/align]
[align=left]     public override bool initInstance();[/align]
[align=left] [/align]
[align=left]       /// <summary>[/align]
[align=left]      ///  资源加载完成之后发生,在DrawableGameComponent的LoadContent方法末尾中调用[/align]
[align=left]      /// </summary>[/align]
[align=left]     public override bool applicationDidFinishLaunching()[/align]
[align=left]  [/align]
[align=left]     /// <summary>[/align]
[align=left]     /// 程序进入后台被挂起[/align]
[align=left]     /// </summary>[/align]
[align=left]     public override void applicationDidEnterBackground()[/align]
[align=left]     /// <summary>[/align]
[align=left]     /// 程序从后台被唤醒 [/align]
[align=left]     /// </summary>[/align]
[align=left]     public override void applicationWillEnterForeground()[/align]
[align=left] [/align]
[align=left]      这和Silverlight for Windows phone总的应用程序生命周期是类似的,不过注意的是目前的cocos2d-x for XNA中并没有加入挂起和唤醒的方法调用,不过很简单,你可以在Game1类的OnActivated和OnDeactivated中调用它们,下个版本修正这个问题。[/align]
[align=left] [/align]

另一个比较重要的变化是,CCApplication增加了一些XNA绘制相关的全局属性,包括:

     1.   ContentManager:用于管理资源的加载。

    2.    SpriteBatch:用于绘制2D的纹理。

    3.    WorldMatrix:当前着色器的世界矩阵。

    4.    ViewMatrix:当前着色器的视图矩阵。

    5.   ProjectionMatrix:当前着色器的投影矩阵。

    6.   basicEffect:用来绘制元素的着色器。
[align=left]   这些属性主要用于绘制,它们会被CCSprite,CCSpriteBatchNode以及CCTextureAtlas等与绘制相关的类使用。如果你的游戏中需要自己绘制2D或者3D的元素,也可以直接调用这些属性进行绘制。[/align]

     第三个就是处理Touch事件,我们可以看到Update方法中就只有一个处理Touch的方法。实际上处理的是上一帧的Touch事件。
[align=left]     第四个就是绘制界面,Draw做两件有意义的事情:[/align]
[align=left]        1. 重置摄像机位置和坐标。(其实这里也不是必须每帧都这么做,因为后面我们看到CCNode的时候就会知道,每帧绘制完毕实际上会将这些矩阵变换还原,后续可以做一些优化)。[/align]
[align=left]        2. 进入CCDirector的mainLoop循环。[/align]
[align=left] [/align]
[align=left]        CCDirector的mainLoop就是整个游戏的绘制过程了,我们以后会慢慢分析。[/align]
[align=left]        现在,你明白CCApplication了吗?欢迎讨论。[/align]
[align=left] [/align]
[align=left]        转载自:www.0x003f.com[/align]
[align=left]      [/align]
[align=left]     欢迎加入QQ群:190784175(cocos2d-x for XNA开源社区),由cocos2d-x for XNA开发团队创建[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2d-xna C#