libgdx 启动者(个人翻译,还请不吝赐教)类和配置
libGDX支持的平台:
对于每个目标平台,都必须有一个启动者类。 这个类实例化了一个后期指定的Application实现,而且实例化了一个ApplicationListener,它实现了应用的逻辑。启动者类是与平台相关的,让我们来看一看怎么样来实例化和配置他们。
这篇文章假设你已经掌握了程序创建,执行和调试,而且已经导入了核心、桌面、Android和HTML5的project到Eclipse其中。
关于libGDX程序的创建、执行和调试会在以后的博文中进行介绍,或者直接到官网查看相关文档。
Desktop(LWJGL) 桌面游戏
lwjgl简单介绍:
打开在my-gdx-game中的Main.java类能够看到例如以下内容:
package com.me.mygdxgame;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
public class Main {
public static void main(String[] args) {
LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
cfg.title = "my-gdx-game";
cfg.useGL30 = false;
cfg.width = 480;
cfg.height = 320;
new LwjglApplication(new MyGdxGame(), cfg);
}
}
首先,一个LwjglApplicationConfigration被实例化。这儿类指定了多种组态设定,比方初始化的屏幕分辨率,是否使用OpenGL ES 1.X或者2.0和很多其它。
当这个配置对象被设置之后,一个LwjglApplication被实例化。MyGdxGame()类是实现了游戏逻辑的ApplicationListener;
这样一个窗体就被创建出来了,而且ApplicationListener会被像在有关生命周期的介绍中那样被调用。
Android(安卓)
Android应用不使用main(0方法作为进入点,可是它须要一个Activity作为起始点。 打开my-gdx-game-android中的MainAcitivity.java类会看到:
package com.me.mygdxgame;
import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
public class MainActivity extends AndroidApplication {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
cfg.useGL20 = false;
initialize(new MyGdxGame(), cfg);
}
}
游戏的基本的起始点是Acitivity中的onCreate()函数。 注意MainAcitivity继承自AndroidApplication。而AndroidApplication又继承自Acitivity.跟桌面程序中一样,一个配置对象将被实例化(AndroidApplicationConfiguration)。仅仅要配置完毕,AndroidApplication.initalize()方法就会被调用,传递了一个ApplicationListener(即MyGdxGame)和配置參数对象。
Android应用程序能够有不同的Acitivity。 可是libGDX游戏应该仅仅有一个Acitivity。游戏的不同场景在libGDX内部实现,跟分开的Acitivity是不一样的。 这样做的原因是由于创建一个新的Acitivity也意味着创建了一个县的OpenGL上下文。这是耗时的,而且意味着全部的图像资源都要被又一次载入。
基于Fragement的libGDX
Android sdk提供了控制屏幕特殊部分的api,它能够再多屏幕上简单的使用。 这个api就是Fragement api。libgdx也能够在一个大屏幕其中的一部分进行显示执行,前提是使用fragement。要创建一个libgdx fragement。要使用到子类:AndroidFragementApplication而且实现方法onCreateView(),比方:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Plane plane = (Plane) getArguments().get(ARGS_PLANE);
return initializeForView(new MyGdxGame());
}
AndroidManifest.xml 文件
除了AndroidApplicationConfiguration之外,一个Android应用程序也通过AndroidManifest.xml文件来进行配置,在Androidproject的根文件夹下能够找到这个文件。文件的内容大致例如以下:
<?
xml version="1.0" encoding="utf-8"?
>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.me.mygdxgame"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
目标SDK版本号
指定targetSdkVersion一个大于等于3的值是非常重要的。假设这个应用程序要支持执行在高于Android1.5的系统上。 假设这个属性没有设置的话。更高的Android版本号将会用来执行程序。 绘制区域的分辨率将会比实际屏幕的分辨率低。这是非常糟糕的。
屏幕方向&配置改变
除了targetSdkVersion。 screenOrientation和configChanges这两个属性也应该设置。
screenOrientation属性指定了应用程序的确定的屏幕方法。 假设应用程序能够在水平和竖直方法上都能正常执行,那么这个属性就能够不设置。
configeChanges属性非常重要,它总是应该有值,即被设置。假设省略了这个属性,那就意味着每次物理键盘弹出或隐藏或者屏幕方向改变的时候。应用程序都将又一次启动。 假设screenOrientation属性被忽略了,libgdx程序会收到ApplicationListener.resize()的调用来指出屏幕的改变。从而对应的又一次布局显示的内容。
Permissions(权限)
假设应用程序要向外部存储空间(比方sd卡)中写入数据、使用网络,使用振动器或者想录音的话,以下的权限就须要被加入到AndroidManifest.xml文件里:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
用户可能会常常对很多权限有所顾虑,所以请谨慎的选择使用。
为了从锁定状态中唤醒,AndroidApplicationConfiguration.useWakeLock须要被设置成true(源代码默认设置成false);
假设游戏不须要使用加速计或者指南针的话,我们建议将AndroidApplicationConfiguration中的useAccelerometer和useCompass变量设置成false;(源代码中这两个变量默觉得true)
Live Wallpapers(动态壁纸)
libGDX提供了一个创建Android动态壁纸的简单的方式。 一个动态壁纸的启动类叫做AndroidLiveWallpaperService,以下是一个样例:
package com.mypackage;
// imports snipped for brevity
public class LiveWallpaper extends AndroidLiveWallpaperService {
@Override
public ApplicationListener createListener () {
return new MyApplicationListener();
}
@Override
public AndroidApplicationConfiguration createConfig () {
return new AndroidApplicationConfiguration();
}
@Override
public void offsetChange (ApplicationListener listener, float xOffset, float yOffset, float xOffsetStep, float yOffsetStep,
int xPixelOffset, int yPixelOffset) {
Gdx.app.log("LiveWallpaper", "offset changed: " + xOffset + ", " + yOffset);
}
}
createListener()和createConfig()这两个方法将会在动态壁纸显示或者在Home界面创建的时候被调用。
offsetChange()方法在用户在Home界面上滑动屏幕(切换屏幕)的时候调用,它告诉你当前屏幕和中介屏幕的偏移量。这种方法会在渲染线程中被调用,所以你不用考虑去同步不论什么东西。
除了一个启动类。你还必须要创建一个xml文件来描写叙述你的壁纸。 我们给它起一个名字叫livewallpaper.xml。 在你的Androidproject中的res文件夹以下创建一个叫做xml的文件夹,然后在里面创建一个livewallpaper.xml的文件,文件里的内容例如以下:
<?xml version="1.0" encoding="UTF-8"?>
<wallpaper
xmlns:android="http://schemas.android.com/apk/res/android"
android:thumbnail="@drawable/ic_launcher"
android:description="@string/description"
android:settingsActivity="com.mypackage.LivewallpaperSettings"/>
这个定义了你的动态壁纸在手机上显示的缩略图,假设你在Android系统中设置当前壁纸为你的应用程序壁纸,那么上面的description和Acitivity就会被显示出来。这个Activity就是一个标准的Activity,它能够有一些动态的效果,比方北京颜色的改变等等。 你能够再SharedPreferences中储存这些设置,以后通过Gdx.app.getPreferences()来载入存储的数据。
最后,你须要向AndroidManifest.xml文件里加入东西,以下是一个包括一个简单Activity的动态壁纸的样例:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mypackage"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14"/>
<uses-feature android:name="android.software.live_wallpaper" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".LivewallpaperSettings"
android:label="Livewallpaper Settings"/>
<service android:name=".LiveWallpaper"
android:label="@string/app_name"
android:icon="@drawable/icon"
android:permission="android.permission.BIND_WALLPAPER">
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
</intent-filter>
<meta-data android:name="android.service.wallpaper"
android:resource="@xml/livewallpaper" />
</service>
</application>
</manifest>
上面的manifest文件定义了:
1.它使用了动态壁纸特征,关于<uses-feature>这个属性,请阅读这篇博文:http://blog.csdn.net/kent_todo/article/details/37956957
2.一个执行绑定壁纸的权限。
3.设置的acitivity。
4.动态壁纸服务,在livewallper.xml文件里指定。
眼下,动态壁纸仅仅支持Android2.1(api level 7) 以上系统。
这样构建出来的动态壁纸在触摸输入上有一定的局限性。普通情况下,仅仅有点击和滑动事件能够被响应。 假设你想响应全部的触摸事件,你能够看看AndroidApplicationConfiguration#getTouchEventsForLiveWallpaper属性,设置成true来接收全部多种的触摸事件。
Daydreams(白日梦)
Tips:Daydreams是Android自4.2的新特性,它提供了在手机处于闲置状态时更加丰富的用户交互体验。即在屏幕锁定时动态显示一些内容。而且能够与用户进行交互。
从Android4.2開始,用户能够设置Daydreams。它会在设备处于闲置或者停驻状态下显示出来。 这些daydreams和屏幕保护程序非常类似。能够显示像相冊一类的东西。libgdx能够让你更加方便的写一个这种daydream。
Daydream的启动类叫做AndroidDaydream,以下是一个样例:
package com.badlogic.gdx.tests.android;
import android.annotation.TargetApi;
import android.util.Log;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.badlogic.gdx.backends.android.AndroidDaydream;
import com.badlogic.gdx.tests.MeshShaderTest;
@TargetApi(17)
public class Daydream extends AndroidDaydream {
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
setInteractive(false);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
cfg.useGL20 = true;
ApplicationListener app = new MeshShaderTest();
initialize(app, cfg);
}
}
简单的继承自AndroidDaydream,重写onAttachedToWindow,设置你的配置參数和ApplicationListener而且实例化你的daydream。
除了daydream自身。你额能够提供一个设置界面(一个Acitivity)来让用户设置你的daydream。 这能够使一个普通的Acitivity,或者一个libGDX的AndroidApplication。这里用一个空的Acitivity作为样例:
package com.badlogic.gdx.tests.android;
import android.app.Activity;
public class DaydreamSettings extends Activity {
}
这个设置界面必须作为metadata属性设置在Daydream service中。在res/xml文件夹下创建一个xml文件。然后指定:
<dream xmlns:android="http://schemas.android.com/apk/res/android"
android:settingsActivity="com.badlogic.gdx.tests.android/.DaydreamSettings" />
最后,在AndroidManifest.xml文件里加入设置界面的相关声明和一个service的描写叙述。比方:
<service android:name=".Daydream"
android:label="@string/app_name"
android:icon="@drawable/icon"
android:exported="true">
<intent-filter>
<action android:name="android.service.dreams.DreamService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="android.service.dream"
android:resource="@xml/daydream" />
</service>
关于IOS上的文档临时不翻译
libgdx 启动者(个人翻译,还请不吝赐教)类和配置的更多相关文章
- MySQL服务正在启动或停止中,请稍候片刻后再试一次【解决方案】
相信有些小伙伴在使用数据库的过程中会经常频繁的启动和停止MySQL服务,有时候会出现“服务正在启动或停止中,请稍候片刻后再试一次.”这样的提示,如下图所示. 于是乎想办法去解决这个问题,但是发现连强制 ...
- Java中ArrayList和LinkedList性能的比较(结果总是怪怪的,如果有不当还请指出)。
不说废话,直接看代码: /** * @author HuYang * @date 2016年8月15日 下午3:26:43 */ public class TestJiHe { private sta ...
- JS实现图片的淡入和淡出的两种方法,如有不足,还请前辈多多指导^-^~
今天下午练习了下这个图片的淡入淡出小demo,如有不足,还请前辈多多指导^-^~ 总结如下: 第一种方法: 个人觉得第一种方法比较好,同时兼容IE8以下浏览器,但是如下代码中,不知可不可以将timer ...
- 在做了 BasePage 时: 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 / / 节中包括
摘自: http://lichengguizy.blog.163.com/blog/static/11771858620122342749552/ 只有在配置文件或 Page 指令中将 enableS ...
- 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置
第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本 uwsgi- ...
- 12.翻译系列:EF 6 中配置一对多的关系【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-f ...
- AspNet Core Web 应用程序的启动 当项目中 没有Startup.cs 类如何设置启动 配置等等
感叹: Core 16年6月1号 在中国宣布上线 到现在已经快经历两年时间了,目前版本已经到了2.0 就目前的前景来看,个人感觉 到2020年才可能有所起色,等到Core更成熟 个人看法:在.net这 ...
- 具有相同名称 的类/接口已在使用。请使用类定制设置来解决此冲突。java调用第三方的webservice应用实例
WSDLToJava Error: http://10.96.84.124:81/BTRPWebServiceForSMB/OnSMBOrderService.svc?xsd=xsd0 [0,0]: ...
- 支付宝接口错误:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8
调试支付宝条码支付的时候碰到个错误:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8, 原因是我代码里的那私钥是直接复制pem文件里的代码的,可支付宝底层的sdk中默认是以文 ...
随机推荐
- GO语言延迟函数defer用法分析
这篇文章主要介绍了GO语言延迟函数defer用法,较为详细的分析了GO语言的特性与具体用法,并给出了一个比较典型的应用实例,具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例讲述了GO语言延迟 ...
- PHP面试 PHP基础知识 八(会话控制)
---恢复内容开始--- PHP会话控制技术 首先了解一下为什么要使用会话控制技术? 本身web 与服务器的交互是通过HTTP协议来实现的,而HTTP协议又是无状态协议.就是说明HTTP协议没有一个內 ...
- 剑指offer——67左旋转字符串
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abc ...
- python软件开发规范&分文件对于后期代码的高效管理
根据本人的学习,按照理解整理和补充了python模块的相关知识,希望对于一些需要了解的python爱好者有帮助! 一.软件开发规范--分文件 当代码存在一个py文件中时: 1.不便于管理 (修改,增加 ...
- 「CSP-S 2019」树的重心
题目 考场上送\(75pts\)真实良心,正解不难:考虑直接对于每一个点算割掉多少条边能使得这个点成为重心,不难发现对于一个不是重心的点,我们要割掉的那条边一定在那个大于\(\lfloor \frac ...
- VMware中 CentOS7挂载windows共享文件夹
在编译自己的hadoop时,不想再次在虚拟机中下载jar包,就想到了挂载自己本地的maven仓库,使用本地仓库来进行编译,这里就需要使用VMware的VMware Tools了,直接复制官方文档如下 ...
- LGV定理 (CodeForces 348 D Turtles)/(牛客暑期多校第一场A Monotonic Matrix)
又是一个看起来神奇无比的东东,证明是不可能证明的,这辈子不可能看懂的,知道怎么用就行了,具体看wikihttps://en.wikipedia.org/wiki/Lindstr%C3%B6m%E2%8 ...
- Failed selinux 错误
再看他如何解决,步骤大概是: 1.开机之后进入linux启动选择界面,停在平时启动的哪那一行按E键,进入grub编辑页面. 2.按↓键光标往下移,在标签fi下面的内容里加上一个enforcing=0. ...
- linux 定时执行sql
说明: 放执行脚本的路径是: /home/vagrant/ssh 文件夹结构: /home |_ vagrant |__ ssh |___ move_order_old_data.sh |___ mo ...
- php 引入其他文件中的变量
在php的开发过程中,如果所有的代码都写在同一个文件中的话,那么文件中的代码数量是否太多了,一来不便维护,二来对于编辑器也是个负担include("class0.php");在ph ...