第五章(2)Libgdx应用框架之启动类和配置

 

   对于每个目标平台而言(本章只讲述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项目的根目录下找到这个文件:

<?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="17" />

   <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|screenSize">

           <intent-filter>

                <actionandroid:name="android.intent.action.MAIN" />

                <categoryandroid:name="android.intent.category.LAUNCHER" />

           </intent-filter>

       </activity>

   </application>

</manifest>

 

 

目标SDk版本

这是至关重要的,如果希望自己的应用运行在Android1.5以上的版本targetSdkVersion的值最小为6.如果这个值没有设置,应用将运行在传统模式。实际绘图区将小于屏幕实际分辨率,很难看。

屏幕方向和配置更改

除了targetSdkVersion,screenOrientation
configChanges属性也需要也需要设置。

screenOrientation属性指明应用的方向。一旦省略这个属性,应用将可以同时在横屏或竖屏中运行。

configChanges属性至关重要,省略这个属性意味着每次键盘点击或方向变化时,应用将重新启动。如果省略screenOrientation,一个libgdx将获得一个ApplicationListener.resize()指示方向变化。可以根据情况布局你的应用。

权限

如果应用需要写入SD卡,需要上网,需要保持屏幕唤醒或者记录音频等,必须在AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

       <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

       <uses-permissionandroid:name="android.permission.VIBRATE"/>

       <uses-permission android:name="android.permission.WAKE_LOCK"/>

 

 

用户经常怀疑这些权限的用处,所以要明智的进行选择。

对于工作后锁定,设置相应的AndroidApplicationConfiguration.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文件夹,将文件放入其中。

<?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"/>

 

 

这里定义一个thumbnail显示你的LWP中,当用户点击LWP中Setting时将显示一个Activity或者描述。通过Activity改变背景颜色,你也可以存储到SharedPreferences,将它们之后通过Gdx.app.getPreferences()载入到LWP中。

最后,你需要添加一些东西到AndroidManifest.xml中,以下是一个简单的示例:

<?xml version="1.0"encoding="utf-8"?>

<manifestxmlns: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-featureandroid:name="android.software.live_wallpaper" />

       <application android:icon="@drawable/icon"android:label="@string/app_name">

                <activityandroid:name=".LivewallpaperSettings" 

                                 android:label="Livewallpaper Settings"/>

                <serviceandroid:name=".LiveWallpaper"

           android:label="@string/app_name"

           android:icon="@drawable/icon"

           android:permission="android.permission.BIND_WALLPAPER">

           <intent-filter>

                <actionandroid:name="android.service.wallpaper.WallpaperService" />

           </intent-filter>

           <meta-data android:name="android.service.wallpaper"

               android:resource="@xml/livewallpaper" />

       </service>                                      

       </application>

</manifest>

 

 

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文件,如下:

<dreamxmlns:android="http://schemas.android.com/apk/res/android"

 android:settingsActivity="com.badlogic.gdx.tests.android/.DaydreamSettings"/>

 

 

最后,在AndroidManifest.xml中添加Activity的信息,一个daydream的服务描述。如下:

<serviceandroid:name=".Daydream"

   android:label="@string/app_name"

   android:icon="@drawable/icon"

   android:exported="true">

   <intent-filter>

           <action android:name="android.service.dreams.DreamService"/>

           <categoryandroid:name="android.intent.category.DEFAULT" />

   </intent-filter>

   <meta-dataandroid:name="android.service.dream"

          android:resource="@xml/daydream" />

</service>

 

 

 

时间: 2024-08-03 22:12:44

第五章(2)Libgdx应用框架之启动类和配置的相关文章

第十五章 接口[《.net框架程序设计》读书笔记]

.net框架|笔记|程序|设计 第十五章 接口 摘要: 接口的应用及完全限定名方式定义接口的应用. 一. 接口与继承 l C#支持单实现继承和多接口继承 l 接口中可以定义:事件.无参属性(属性).含参属性(索引器):C#不允许接口定义任何静态成员(CLR却允许定义静态成员):CLR不允许接口定义实例字段和构造器. l 缺省为public abstract 方法,但不可用任何修饰符进行修饰(包括public) l 将值类型转换为接口类型(假设其实现了某个接口),则值类型被装箱为引用类型,以调用其

4.3、Libgdx启动类和配置

(原文:http://www.libgdx.cn/topic/45/4-3-libgdx%E5%90%AF%E5%8A%A8%E7%B1%BB%E4%B8%8E%E9%85%8D%E7%BD%AE) 对每个平台来说,必须有一个启动类.这个类对于各个平台来说是独立的.这里只介绍Android. **Android** Android应用不适用main()方法作为入口,而是需要一个Activity.打开Android项目,会找到如下代码: package cn.libgdx.game; import

第五章(6)Libgdx应用框架之接口

Android游戏开发群:290051794Libgdx游戏开发框架交流群:261954621    有时访问特定平台的API很有必要举例(http://swarmconnect.com/). 下面这些例子纯属虚构,假设我们想使用一个只在Android上有的简单的leaderboard API,对其他平台只是简单日志或者模拟返回值. Android API看起来像这样:           /** Let's assume this is the API provided by Swarm **

Frontpage2000中文教程:第五章(最后的启示)

frontpage|教程|中文 第五章 最后的启示 启示(1)定置表格 表格可以定置它的长宽,具体怎么做的?我们新建一个网页,插入一个一行一列的表格.在表格内点击鼠标右键,选择表格属性.在弹出的窗口中设置(如图1). (图1) 启示(2)设置图片热点连接 有时你可能不希望一张图片都做上连接,只想为图片的某部分做上连接,这就叫做提片热点连接.如何做到呢?我们点击一下想要做热点连接的图片,你会看到Frontpage2000会自动在编辑区下面弹出一个工具栏(如图2). (图2) 你可以使用这些工具加工

《PHP程序设计》 第五章 中场一:数据库连接

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />          第五章 中场一:数据库连接      前两章中集中介绍了PHP语言,现在停下来开始创建一个应用程序.在本章中将创建一个连接MySQL数据库的应用程序.      在学习过前面两章之后,你肯定已经学会了怎样处理PHP内部数据,以及怎样编写语句和函数.下一步从逻辑上讲,应该到了学习如何用SQL(结构化查询语句

SEO从零开始第五章——新闻源与百度敏感词

  营销手段中包含了SEO,SEO是营销一部分如果想在SEO界有所成就那一定要学会网络营销手段,网络营销会了SEO自然就会了,因为SEO是根本网络营销而变的.2013年5月28日百度外链工具全新升级,我记得在SEO从零开始第2章节说过,快照全部停留在27号,28号百度肯定有动作,百度拒绝外链技术越来越成熟, 回到正题,最近很多灰色行业在大量收购百度新闻源来做百度敏感词语,先说说我自己理解的原理,先知道原理然后再推荐百度如何针对这些问题.目前主流获得敏感词语排名的方案企业,新闻源站劫持获取排名.百

&amp;gt; 第五章 类(rainbow 翻译)*1 (来自重粒子空间)

<<展现C#>> 第五章 类(rainbow 翻译)出处:http://www.informit.com\matter\ser0000002正文:第五章  类       前一章讨论了数据类型和它们的用法.现在我们转移到C#中至关重要的结构--类.没有了类,就连简单的C#程序都不能编译.这一章假定你知道了一个类的基本组成部分:方法.属性.构造函数和析构函数. C#在其中增加了索引和事件.       在这一章中,你学到下列有关类的话题.      . 使用构造函数和析构函数    

&amp;gt; 第五章 类(rainbow 翻译)*2 (来自重粒子空间)

5.3  类属性    有两种途径揭示类的命名属性--通过域成员或者通过属性.前者是作为具有公共访问性的成员变量而被实现的:后者并不直接回应存储位置,只是通过 存取标志(accessors)被访问.    当你想读出或写入属性的值时,存取标志限定了被实现的语句.用于读出属性的值的存取标志记为关键字get,而要修改属性的值的读写符标志记为set.在你对该理论一知半解以前,请看一下清单5.9中的例子,属性SquareFeet被标上了get和set的存取标志.清单 5.9  实现属性存取标志 1: u

《.net编程先锋C#》第五章 类(下)(转)

编程 5.2.3 方法屏蔽重定义方法的一个不同手段就是要屏蔽基类的方法.当从别人提供的类派生类时,这个功能特 别有价值.看清单 5.6,假设BaseClass由其他人所写,而你从它派生出 DerivedClass . 清单 5.6 Derived Class 实现一个没有包含于 Base Class中的方法 1: using System;2: 3: class BaseClass4: {5: }6: 7: class DerivedClass:BaseClass8: {9: public vo