对于每个目标平台而言(本章只讲述 Android ),启动类必须实现。这个类实现一个后端特定的应用接口, ApplicationListener 实现应用逻辑。启动类对平台有一定的依赖性,接下来我们看看怎样实例化和配置 android 的后端。 本章假设你已经根据第四章( 1 )的
对于每个目标平台而言(本章只讲述 Android ),启动类必须实现。这个类实现一个后端特定的应用接口, ApplicationListener 实现应用逻辑。启动类对平台有一定的依赖性,接下来我们看看怎样实例化和配置 android 的后端。
本章假设你已经根据第四章( 1 )的内容配置好 android 项目。
Android 应用不使用 main ()方法作为入口,而是通过一个 Activity 。打开 my-gdx-game-android 项目中的MainActivity.java类:
package com.me.mygdxgame; import android.os.Bundle; importcom.badlogic.gdx.backends.android.AndroidApplication; importcom.badlogic.gdx.backends.android.AndroidApplicationConfiguration; public class MainActivity extendsAndroidApplication { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AndroidApplicationConfiguration cfg = newAndroidApplicationConfiguration(); cfg.useGL20 = false; initialize(new MyGdxGame(), cfg); } }
主入口方法是 Activity 的 OnCreate ()方法。注意 MainActivity 继承自 AndroidApplication , AndroidApplication 继承自 Activity 。一旦配置好, AndroidApplication.initialize() 就会被调用,传递到 ApplicationListener ( MyGdxGame )。
Android 可以有多个 Activity 。 Libgdx 游戏通常只有一个 Activity 组成。游戏的不同的屏幕在 libgdx 中实现,而不是分成多个 Activity 。这样做的原因是创建一个新的 Activity 同样需要创建一个新的 OpenGL 环境,也就意味着所有的图像资源被重新加载。
AndroidManifest.xml 文件
除了 AndroidApplicationConfiguration , Android 应用也通过 AndroidManifest.xml 进行配置,可以在 Android 项目的根目录下找到这个文件:
目标 SDk 版本
这是至关重要的,如果希望自己的应用运行在 Android1.5 以上的版本 targetSdkVersion 的值最小为6.如果这个值没有设置,应用将运行在传统模式。实际绘图区将小于屏幕实际分辨率,很难看。
屏幕方向和配置更改
除了 targetSdkVersion , screenOrientation 和 configChanges 属性也需要也需要设置。
screenOrientation 属性指明应用的方向。一旦省略这个属性,应用将可以同时在横屏或竖屏中运行。
configChanges 属性至关重要,省略这个属性意味着每次键盘点击或方向变化时,应用将重新启动。如果省略 screenOrientation ,一个libgdx将获得一个 ApplicationListener.resize() 指示方向变化。可以根据情况布局你的应用。
权限
如果应用需要写入 SD 卡,需要上网,需要保持屏幕唤醒或者记录音频等,必须在 AndroidManifest.xml 中添加以下权限:
用户经常怀疑这些权限的用处,所以要明智的进行选择。
对于工作后锁定,设置相应的 A ndroidApplicationConfiguration.useWakeLock为true。
如果一个游戏不需要加速度计和罗盘访问,通过设置AndroidApplicationConfiguration 中的useAccelerometer和useCompass设置为false。
LiveWallpapers
Libgdx 可以通过较为简单的方式创建基于 Android 的 LiveWallpapers 。一个 livewallpaper 的启动类称为 AndroidLiveWallpaperService ,以下是示例:
package com.mypackage; // imports snipped for brevity public class LiveWallpaper extendsAndroidLiveWallpaperService { @Override public ApplicationListener createListener () { return newMyApplicationListener(); } @Override public AndroidApplicationConfiguration createConfig () { return newAndroidApplicationConfiguration(); } @Override public void offsetChange (ApplicationListener listener, float xOffset,float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, intyPixelOffset) { Gdx.app.log("LiveWallpaper", "offset changed: " +xOffset + ", " + yOffset); } }
createListener() 和 createConfig() 方法将在 livepaper 在主屏幕上创建时调用。
offsetChange()方法将被渲染线程调用,所以你不需要更改。
除了启动类,你也需要创建一个XML文件描述你的Wallpaper。我们可以定义它的名字为livewallpaper.xml。在你的res文件夹下创建一个xml文件夹,将文件放入其中。
这里定义一个 thumbnail 显示你的 LWP 中,当用户点击 LWP 中 Setting 时将显示一个 Activity 或者描述。通过 Activity 改变背景颜色,你也可以存储到 SharedPreferences ,将它们之后通过 Gdx.app.getPreferences() 载入到LWP中。
最后,你需要添加一些东西到 AndroidManifest.xml 中,以下是一个简单的示例:
Daydream
从 Android4.2 开始,用户可以设置 Daydreams ,会在设备闲置或停靠时显示。这些 daydream 类似屏保或者显示相册之类的东西。 Libgdx 可以让你轻松的编写 Daydream.
Daydream 的启动类为 AndroidDaydream ,以下是示例:
packagecom.badlogic.gdx.tests.android; importandroid.annotation.TargetApi; importandroid.util.Log; importcom.badlogic.gdx.ApplicationListener; importcom.badlogic.gdx.backends.android.AndroidApplicationConfiguration; importcom.badlogic.gdx.backends.android.AndroidDaydream; importcom.badlogic.gdx.tests.MeshShaderTest; @TargetApi(17) publicclass Daydream extends AndroidDaydream { @Override public void onAttachedToWindow(){ super.onAttachedToWindow(); setInteractive(false); AndroidApplicationConfiguration cfg = newAndroidApplicationConfiguration(); cfg.useGL20 = true; ApplicationListener app = newMeshShaderTest(); initialize(app, cfg); } }
简单的继承了 AndroidDaydream ,重写了 onAttachedToWindow ,设置你的配置和 ApplicationListener 并初始化你的daydream。
处理 daydream 本身你可以提供一个 Activity 来设置 daydream 。这可以是一个普通的 Activity ,或者一个 libgdx 的 AndroidApplication (继承自 Activity )。一个空的 Activity 作为例子:
packagecom.badlogic.gdx.tests.android; importandroid.app.Activity; publicclass DaydreamSettings extends Activity { }
这个 Activity 必须指明到 daydream 服务的元数据。在 res/xml 下创建 xml 文件,如下:
最后,在 AndroidManifest.xml 中添加 Activity 的信息,一个 daydream 的服务描述。如下:
查看更多关于第五章(2)Libgdx应用框架之启动类和配置的详细内容...