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>
/// 可以做一些简单全局变量的初始化工作,在DrawableGameComponent的Initialize方法中调用
/// </summary>
public override bool initInstance();
/// <summary>
/// 资源加载完成之后发生,在DrawableGameComponent的LoadContent方法末尾中调用
/// </summary>
public override bool applicationDidFinishLaunching()
/// <summary>
/// 程序进入后台被挂起
/// </summary>
public override void applicationDidEnterBackground()
/// <summary>
/// 程序从后台被唤醒
/// </summary>
public override void applicationWillEnterForeground()
这和Silverlight for Windows phone总的应用程序生命周期是类似的,不过注意的是目前的cocos2d-x for XNA中并没有加入挂起和唤醒的方法调用,不过很简单,你可以在Game1类的OnActivated和OnDeactivated中调用它们,下个版本修正这个问题。
另一个比较重要的变化是,CCApplication增加了一些XNA绘制相关的全局属性,包括:
1. ContentManager:用于管理资源的加载。
2. SpriteBatch:用于绘制2D的纹理。
3. WorldMatrix:当前着色器的世界矩阵。
4. ViewMatrix:当前着色器的视图矩阵。
5. ProjectionMatrix:当前着色器的投影矩阵。
6. basicEffect:用来绘制元素的着色器。
第三个就是处理Touch事件,我们可以看到Update方法中就只有一个处理Touch的方法。实际上处理的是上一帧的Touch事件。
这些属性主要用于绘制,它们会被CCSprite,CCSpriteBatchNode以及CCTextureAtlas等与绘制相关的类使用。如果你的游戏中需要自己绘制2D或者3D的元素,也可以直接调用这些属性进行绘制。
第三个就是处理Touch事件,我们可以看到Update方法中就只有一个处理Touch的方法。实际上处理的是上一帧的Touch事件。
第四个就是绘制界面,Draw做两件有意义的事情:
1. 重置摄像机位置和坐标。(其实这里也不是必须每帧都这么做,因为后面我们看到CCNode的时候就会知道,每帧绘制完毕实际上会将这些矩阵变换还原,后续可以做一些优化)。
2. 进入CCDirector的mainLoop循环。
CCDirector的mainLoop就是整个游戏的绘制过程了,我们以后会慢慢分析。
现在,你明白CCApplication了吗?欢迎讨论。
转载自:www.0x003f.com
欢迎加入QQ群:190784175(cocos2d-x for XNA开源社区),由cocos2d-x for XNA开发团队创建