第一章:AndEngine游戏结构---1.了解生命周期
在本章中,我们将要采取的主要组成部分,需要构建一个游戏中AndEngine看看。这些主题包括:
知道的生命周期
选择我们的引擎类型
选择一个分辨率政策,
创建对象工厂
创建游戏管理器
引入的声音和音乐
使用不同类型的纹理
应用纹理选项
使用AndEngine字体资源
创建资源管理器
保存和加载游戏数据
介绍
AndEngine最吸引人的地方是令人难以置信的轻松的游戏开发。设计和编码的一场比赛后,在一个星期内寻找到AndEngine的可能性,是不是太牵强,但是这并不是说,这将是一场完美的比赛。编码过程可以是一个单调乏味的任务时,我们不明白的引擎是如何工作的。这是一个好主意,了解AndEngine和游戏结构的主要组成部分,以创建精确的,有组织的和可扩展的项目。
在本章中,我们要去了的AndEngine和一般游戏编程的一些最必要的组成部分。我们要看一看在一些类中,将有助于我们快速而高效地创建各种游戏的基础。此外,我们将讨论一些资源和对象类型,从而发挥最大的作用,在塑造整体的外观和感觉,我们的游戏之间的差异。这是鼓励保持本章的标签,作为参考,如果需要的话。
了解生命周期
重要的是要了解它涉及到我们的游戏初始化时的操作顺序。一个游戏的基本需求,包括创建引擎,加载游戏的资源,并建立初始屏幕和设置。这是所有它需要的,以创造一个AndEngine游戏的基础。但是,如果我们在我们的游戏计划在更多的多样性,这是明智的,知道的整个生命周期,包括在AndEngine
准备工作
请参阅名为PacktRecipesActivity的代码包中的类。
如何做到这一点...
AndEngine生命周期包括了一些方法,我们定义直接负责。这些方法包括创建EngineOptions对象,创建了Scene对象,填充现场用子实体。这些方法被称为按以下顺序:
1. 定义 onCreateEngineOptions() 方法 :
@Override
public EngineOptions onCreateEngineOptions() {
// Define our mCamera object
mCamera = new Camera(0, 0, WIDTH, HEIGHT);
//声明和定义我们的引擎被应用到我们的引擎对象
EngineOptions engineOptions = new EngineOptions(true,
ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(),
mCamera);
//这是必要的,很多应用程序定义以下
//唤醒锁定选项以禁用设备的显示
//关闭在游戏过程中,由于不活动engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
//返回的engineOptions对象
return engineOptions;
}
2. 定义 onCreateResources()
@Override
public void onCreateResources(
OnCreateResourcesCallbac
pOnCreateResourcesCallba
}
3. 定义onCreateScene()
@Override
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) {
// Create the Scene object
mScene = new Scene();
//通知回调函数,我们完成创建了scene对象,并返回
// mScene to the mEngine object (自动处理)
pOnCreateSceneCallback.onCreateSceneFinished(mScene);
}
4. 定义onPopulateScene()
@Override
public void onPopulateScene(Scene pScene,
OnPopulateSceneCallback pOnPopulateSceneCallback
// onPopulateSceneFinished(),类似于the resource and scene的回调
//一旦我们完成填充场景,就会被执行。
pOnPopulateSceneCallback
}
这些如何工作?
在此配方的类的代码是任何AndEngine游戏的基础。我们已经成立了一个主要的活动类,作为我们的应用程序的入口点。该活动包含四个主要的方法包括在AndEngine活动的生命周期,我们有责任,开始创建的EngineOptions选项,创建资源,创建了场景,并填充现场。
在第一步中,我们重写引擎的onCreateEngineOptions()方法。在此方法中,我们的主要重点是我们的Camera对象,以及我们的EngineOptions对象实例化。这两个对象的构造函数允许我们定义我们的应用程序的显示属性。此外,我们已经禁用了屏幕自动关闭过程中通过的engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON)方法调用的应用程序闲置。
第二步,我们将继续覆盖onCreateResources()方法,它为我们提供了一个指定的方法创建和设置所需的任何资源在我们的游戏中。这些资源可能包括纹理,声音和音乐,和字体。在这一步,下面的两个,我们需要通过应用程序的生命周期,以进行相应的回调方法来拨打电话。的onCreateResources()方法,我们必须调用pOnCreateResourcesCallba
第三步涉及到的scene对象的实例化和设置。设置场景可以很简单,在这个食谱中显示,或更复杂的项目,它可能包括设立触摸事件监听器,更新处理程序,等等。一旦我们完成设定的场景,我们必须调用pOnCreateSceneCallback.onCreateSceneFinished(MSCENE)方法,通过我们新创建的MSCENE对象引擎的移动设备上的显示。
最后定义onPopulateScene()方法。这种方法是在专门用于连接子实体的场景。与前两个步骤,我们必须调用为pOnPopulateSceneCallback
在下面的列表中,我们将介绍生命周期方法从一个活动的开始直到结束。
生命周期的顺序如下:
onCreate : 这种方法是在Android SDK的原生应用程序的入口点。在AndEngine发展,此方法只调用BaseGameActivity类中的onCreateEngineOptions()方法,然后返回选项到游戏引擎。
onResume: 这是另一款Android SDK的本地方法。在这里,我们只是收购后锁定设置从我们的EngineOptions对象,继续调用引擎的RenderSurfaceView对象的onResume()方法。
onSurfaceCreated: 此方法将调用onCreateGame()在活动初始启动过程中,或注册一个布尔变量作为真正的资源重新加载,如果此前这个活动已经被已经部署。
onReloadResources: 此方法重新加载游戏资源,如果我们的应用程序带来了从最小化成为关注的焦点。应用程序的初始化时这个方法不会被调用。
onCreateGame:
onCreateResources: 这种方法使我们的声明和定义我们的应用程序的初始期间推出我们的活动所需要的资源。这些资源包括,但不限于,纹理,声音和音乐,和字体。
onCreateScene: 在这里,我们处理我们的活动的场景对象的初始化。在此方法中,这是可能的附加实体的场景,但为了保持组织,它通常最好附加在实体内onPopulateScene()。
onPopulateScene: 在生命周期的onPopuplateScene()方法中,我们只是完成了场景,但仍然有一些生命周期的调用将自动处理引擎。当我们的应用程序第一次启动时,这个方法应该可以用来定义场景的视觉效果。请注意,已经创建场景,并在这一点上应用到引擎。在某些情况下是可以看到实体的场景,如果没有加载屏幕或闪屏的地方,如果有大量的实体连接。
onGameCreated: 这标志着,onCreateGame()序列完成后,重新加载资源,如果有必要,否则什么都不做。重新加载资源依赖于简要地提及在5个生命周期onSurfaceCreated方法调用返回的布尔变量。
onSurfaceChanged: 这种方法被称为我们的应用程序的每次方向的变化,从风景到人像模式,反之亦然。
onResumeGame: 在这里,我们有最后一个方法调用发生在活动的启动周期。如果我们的活动达到这一点没有任何问题,引擎的start()方法被调用时,将游戏的更新线程生效。
生命周期调用在最小化/终止的的时候,如下:
onPause: 第一个方法调用时,活动减少或终止。这是原生的Android暂停方法,它调用的暂停方法的RenderSurfaceView对象和应用的游戏引擎后恢复锁定设置。
onPauseGame: 接下来,AndEngine的实现onPause()只是简单地调用stop()方法在引擎上,造成引擎的更新处理程序停止更新线程。
onDestroy: 在OnDestroy()方法中,AndEngine清除引擎的管理类ArrayList对象内包含的所有图形资源。这些管理者包含在VertexBufferObjectManage
onDestroyResources: 该方法的名称可能会有点误导,因为
我们已经卸载了大部分的资源在onDestroy()。这方法确实是释放所有的声音和音乐的对象存储在他们的releaseAll()方法通过调用相应的管理者。
onGameDestroyed: 最后,我们需要调用AndEngine完整的生命周期中的最后一个方法。不是一大堆的行动发生在这个方法中。AndEngine只是设置一个mGameCreated的的布尔变量为false,用于在引擎中,其中规定的活动不再运行。
在下面的图片中,我们可以看到生命周期看起来像在活动,当游戏被创建,最小化或销毁:
由于AndEngine生命周期的异步性质,它是可能的一些方法要期间多次执行一个单一的启动实例。这些事件的发生,不同的设备之间。
更多。。。
这个方法在前面的章节中,我们讨论的主要BaseGameActivity类。
下面的类可以使用作为 BaseGameActivity 类的替代品,每个提供自己的细微差别。