手机游戏开发基础(经典)

手机游戏开发基础(经典)
手机游戏开发基础(经典)

1

GDDC

游戏设计与开发

课程

第十四章 手机游戏开发基础

MIDP 中定义的UI (用户界面)从逻辑上包括两组API :高级API 和低级API 。高级API 通过应用高层抽象实现,它主要强调可移植性。而实际的绘制于用户交互处理则有实现具体来完成。使用高级API 的应用程序对于组件的显示外观只有有限的控制权,它只能访问高级UI 事件。

另一方面,通过使用低级API ,应该程序可以完全控制外观,而且可以直接访问输入设备并控制由用户交互产生的重要事件。但低级API 可能是与某一固定设备相关的,即可能只在某一设备上可用。所以,使用低级API 的应用程序在可移植性上会大打折扣的。这也是所有开发人员比较头疼的事,在某款手机上开发的游戏,在其他机型上就有可能运行不了,还得需要代码上的改动,而且这种代码上的改动有时会很大的,那么要求开发人员在做游戏的过程中,时刻注意游戏的可移植性问题。 简单的说,高级API 由于控制不了控件的外观,所以一般来说,高级API 都用于手机上的应用或游戏当中的参数设置(如:游戏的关数、难易程度),相反,因为低级API 可以随意在手机屏幕上画各种各样的内容,而且能够很方便地得到用户的输入(包括触摸方式),所以在游戏过程中,主要用的还是低级API 。 本章将讨论手机游戏开发用户界面的一些基础知识,而后两章将介绍使用高级API 和低级API 的UI 开发。

14.1 MIDLET 程序开发的基本方法

1) 编写源代码,生成.java 文件。 2) 编译、预校验,生成.class 文件。 3) 在模拟器上运行并测试。 4) 打包生成jar 文件。 5) 下载到真机上测试。

Mobile Media API

(MMAPI)为多媒体开发提供了一个强大,可扩充以及简单的接口。它有一套规范的播放和录制audio 或video 的接口。

游戏设计与开发

MIDlet程序开发的基本流程图

14.2MIDP 程序类 MIDLET

在上一章节,我们通过一个简单的例子,介绍了MIDlet的生命周期,已经对MIDlet有了一个初步的认识,下面我们要系统地学习一下MIDlet。

14.2.1MIDlet 类介绍

一个MIDP应用程序称作MIDlet——MIDP小应用程序,它不能够单独地运行,必须运行在特定的环境之中,或者说运行在一个容器中。可以把这个容器看作是个大

的应用程序,它运行在Java虚拟机之上,但不能完成任何特定的任务,因此需要程

序开发者编写代码以完成一项工作,这些编写的程序就称作小应用程序。这样设计的

目的是为了让它能在所有的容器中运行,这些容器实现可能不同,但容器的内部却是

相同的。

通过这种形式,程序开发者就从各种运行环境、各种设备中解放出来,只需设计一个MIDlet,就可以在不同的浏览器上运行。比如不同的厂家、不同型号的手机,只

要它支持J2ME、支持MIDP,就有这样一个容器。至于这个容器的外部形状如何,

程序开发者不必考虑,因为容器的内部都是一样的,只要编写规范的小应用程序就行

了。

MIDlet中这个容器就是MIDP实现,它以SUN公司发布的CLDC规范和MIDP 规范为标准,然后针对设备进行移植,从而提供给所有的MIDlet都一样的容器内部

接口。编写MIDP应用程序的要求就是必须扩展MIDlet类,这个类定义了一些接口,

JAM可以通过这些接口对MIDlet进行控制。MIDlet类位于以下包中:

java.microedtion.midlet,因此,在所有的MIDlet中,都必须引入这个包:import

javax.microedtion.midlet.*。注意:这里midlet表示包时必须小写,而MIDlet类的前

三个字母大写。在本书中,称MIDP应用程序为MIDlet,可以表示整个应用程序,也

可以只表示扩展了MIDlet类的子类,即MIDP应用程序的主类。

14.2.2midlet包介绍

midlet包对MIDP应用程序进行了定义,也定义了应用程序和它所运行的环境之间的接口,如前面所述MIDP应用程序被称作MIDlet。

midlet包中只有一个类——MIDlet,它是MIDP应用程序必须要扩展的父类,还有一个异常类——MIDletStateChangeException,它用来监测MIDP应用程序状态的改

变。Midlet包整个层次结构如下:

class https://www.360docs.net/doc/a69005021.html,ng.Object

一个player知道如

何去解释媒体数

据。某种类型的player

知道如何根据mp3媒体数据

产生声音。另外一个player

知道如何播放一端

QuickTime的movie。

javax.microedition.medi

a.Player接口的实现

(implement)既是这里说

的player。

2

3

GDDC

游戏设计与开发

课程

class javax.microedtion.midlet.MIDlet class https://www.360docs.net/doc/a69005021.html,ng.Throwable class https://www.360docs.net/doc/a69005021.html,ng.Exception

class javax.microediton.midlet.MIDletStateChangeException 14.2.3 扩展MIDlet 类

MIDlet 是一个MIDP 应用程序,应用程序必须扩展MIDlet 类,这样才能使得应用管理器(JAM )对MIDlet 进行控制,并能够从应用程序描述文件中获取属性,通知和请求状态改变等。

由于MIDlet 类位于包javax.microedtion.midlet 中,因此第一步需要在代码程序中引入这个包:

import javax.microedtion.midlet.*;

注意不要写成“import javax.microedtion.MIDlet.*;接着需要扩展MIDlet 类,它的类名就是要编写的主类名。

扩展后的代码如下:

import javax.microedition.midlet.MIDlet;

public class MyMIDlet extends MIDlet { }

从java 语法上说,这样一个空类是可以编译的,但实际上用eclipse 试图编译的时候会拒绝通过,是因为有三个抽象方法是必须实现的,除非MIDlet 子类也声明为抽象的:

import javax.microedition.midlet.MIDlet;

public abstract class MyMIDlet extends MIDlet { }

但是通常情况下,这种做法是没有意义的,应用程序需要直接扩展MIDlet 类。 14.2.4 构造函数

你能用一个或多个controls 来调整player 的行为。你可

以在player 从媒体转换数据的时候从一个player 实例,取得并且使用controls 。比如,你能用一个VolumeControl 来调节一个采样音频的声音大小。Controls

javax.microedition.medi a.Control 接口的实现。详细的Control 子接口在javax.microedition.medi a.control 包中

游戏设计与开发

接着可以为自己的MIDlet子类生成一个构造函数,这和编写J2SE程序是一样的。

这个构造函数并不是必须的,但生成这个构造函数会带来很多便利,因为在整个游戏

的生存期间,它是第一个被调用的,而且只被调用一次,因此可以利用它进行一些应

用程序的初始化工作,比如获取所需要的资源(如游戏中的图片、声音等)、初始化

某些变量等。

这里先写个空的构建函数,在需要的时候可以往里面添加代码:

import javax.microedition.midlet.MIDlet;

public class MyMIDlet extends MIDlet {

public MyMIDlet() {

super();

}

}

类MyMIDlet之内构造函数之外的任何地方可以声明所需要的成员变量(为了程序结构的清晰,通常在紧靠声明的下面进行),比如声明一个原始数据类型(用来记

录游戏中的分数),声明一个类对象,还可以在声明的时候初始化,这与J2SE编程是

一样的,因为它们都遵守标准的Java语言规范。

这里没有声明变量,在需要的时候可以自行添加进去。下面就要描述的是MIDlet 类功能以及其API,只要实现了一些固定的API函数,java应用程序管理器才能对

MIDlet进行管理和控制。

14.2.5MIDlet类功能介绍

要满足java应用程序管理器的要求,必须实现下面三个方法:startApp()、pauseApp()、destroyApp(boolean unconditional),这三个方法分别被java应用程

序管理器用来向MIDlet发出信号,通知它进入某个状态。

实现后的代码如下:

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

public class MyMIDlet extends MIDlet {

一个data source

知道如何从它的原

始位置读取到媒体

数据给player。媒体

数据可以被保存在不同的

位置,从远程服务器到

资源文件或者RMS数据库。

媒体数据可以从原始位置

通过HTTP,像RTP一样的流

式传输协议,或者其他机制

传输到player。

javax.microedition.medi

a.protocol.DataSource是

MMAPI中所有data source

类的抽象父类。

4

5

GDDC

游戏设计与开发

public MyMIDlet() { super();

}

protected void startApp() throws MIDletStateChangeException { }

protected void pauseApp() { }

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

}

这段代码就可以编译,表明它已经满足了java 应用程序管理器的基本要求。是一个完整的MIDP 应用程序。当然这只是一个MIDlet 的框架,并没有完成任何工作。如果要完成所需的特定工作就,编写相应代码就行了,这个工作与在J2SE 中没有什么差别。下面以MIDlet 整个生存周期状态间转换为基础,详细描述MIDlet 的方法和它们的调用机制。

(1) Active 状态

MIDlet 进入的第一个状态不是Active 状态而是Paused 状态,只是这个状态比较短暂。

在应用程序管理器中,用户可以单击软键Launch,通知应用程序管理器启动用户所选构造函数返回后,MIDlet 就进入了Paused 状态。此时应用程序管理软件会立即获得MIDlet 的控制权,调用startApp 方法。

应用管理软件startApp 方法来向MIDlet 发出信号,通知它已经进入Active 状态,在Active 状态MIDlet 可能拥有资源,只有在MIDlet 处于Paused 状态时才能调用这个方法。

在Active 状态MIDlet 可以完成指定工作,因此程序开发以在这个函数中编写希望MIDlet 执行的代码,比如调用自定义方法,或者其类对象方法等。

可以支持那些类型

的Media 文件?如果

你的装置支持MMAPI 的话,那么这个装置可以播放什么类型的媒体数据呢?支持什么数据传输协议?

MMAPI 并不要求任何指定 的content type 或协议,但你能在运行时找出程序支持什么类型的数据,通过调用

Manager

类的

getSupportedContentType s()

getSupportedProtocols()

方法。 可能发生的最糟糕的事情是什么呢?如果你通过Manager 给Player 一种不支持的数据类型或协议,它会抛出个exception 。 你的程序应该试图去从这样的例外中恢复过来,可以显示些礼貌的信息提示给用户。

游戏设计与开发

例如下面的代码:

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

public class TestMIDlet extends MIDlet {

String message;//声明一个成员变量

public TestMIDlet() {//在构建函数里进行初始化工作

super();

message = new String("I'm initiated,adn in Paused state.");

showMsg(message);

}

protected void startApp() throws MIDletStateChangeException {//在这里进行要完成的工作

message = "I'm in Active state now.";

showMsg(message);

}

protected void pauseApp() {

// TODO Auto-generated method stub

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

// TODO Auto-generated method stub

}

MIDP 2.0的媒

体 :MIDP 2.0规范包括了

一个MMAPI的子集。它向上

兼容所有API。MIDP 2.0子

集有如下特性:1。只支持

音频回放(录制)。不包含

video控制接口。2。多

Player不能被同步3。

DataSource类和

javax.microedition.medi

a.protocol包的其他类没

有被包括进来;应用程序不

能实现他们自己的协议。

4。Manager类是被简化的。

MIDP要求支持乐音产生和

采样,WAV音频播放。

6

7

GDDC

发课

private void showMsg(String msg) { System.out.println(msg);

}

}

在eclipse中编译并运行这个程序,控制台上会输出如下结果:

I'm initiated,adn in Paused state.

I'm in Active state now.

应用管理软件调用这个MIDlet,它会首先调用构造函数,然后再调用startApp,由于构造函数只运行一次,而startApp可能被应用管理软件调用多次,所以需要的初始化工作,应该在构造函数中进行,而不时放在startApp中。这个阶段会有两种错误会导致服务不能启动:

瞬时错误

非瞬时错误

对于瞬时错误,应用程序应该抛出异常—MIDletStateChangeException(如果MIDlet 不能立即启动,但能够在以后启动时,则抛出这个异常,对于非瞬时错误,notifyDestroyd方法会被调用。

如果在startApp期间发生运行时异常,MIDlet会立即销毁,destroyApp方法会被调用允许MIDlet进行清除工作。

(2)Paused状态

MIDLET进入的第一个状态就是Paused状态,然后通过通用startApp方法进入Active状态。

?从Active状态进入Paused状态

在Active状态下(并且只有这个状态下),应用程序管理以调用pauseApp方法向MIDlet发出信号,通知它暂停运行并进入Paused状态。在Paused状态,MIDlet 必须释放共享资源并静止。如果pauseApp期间发生运行时异常,MIDlet将被立即销毁,此时会调用destroyApp方法,允许MIDlet进行清除工作。

在Active状态下(并且只有这个状态下),MIDlet可以使用notifyPaused方法通知应用管理软件它不需要活动了,并进入Paused状态,如果MIDlet被销毁,或者还没有启动,调用这个方法将没有效果。

?从Paused状态进入Active状态MotoJ2SDK是为摩托罗拉388手机定制的命令行开发工具包,当然也可与IDE 开发工具集成从而方便用户的开发。其中可以集成的开发环境包括:CodeWarrior, JCreator 等。另外SUN公司还提供了Java的开发工具,J2ME Wireless Tookit是为无线手持设备(MDIP)定制的简易开发工具包。如果用户需要更强的IDE开发环境,那么请选用Forte for Java CE。目前SUN公司提供的开发工具中暂时还没有388的模拟器。

游戏设计与开发

在Paused状态下,应用程序管理软件可以调用startApp()方法,使它再次活动。

另外,resumeRequest()给MIDlet提供了一个指出它要进入Active状态的机制,应用管理软件将通过这方法调用, 断哪个应用程序要转移到Active状态。当应用管

理软件决定激活这个应用程序时,它将调用startApp方法。

当调用resumeRequest()方法时,应用程序一般处于Paused状态。即使在Paused 状态应用程序也可处理异步事件,如timer或回叫等。

notifyPaused方法和resumeRequest方法被声明为final,在MIDlet子类中不能重载这个方法。

继续修改TestMIDlet.java前面的代码,进行测试:

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

public class TestMIDlet extends MIDlet {

String message;//声明一个成员变量

boolean hasTested;//声明一个变量,代表是否测试过。

public TestMIDlet() {//在构建函数里进行初始化工作

super();

message = new String("I'm initiated,adn in Paused state.");

hasTested = false;

showMsg(message);

}

protected void startApp() throws MIDletStateChangeException {//在这里进行要完成的工作

message = "I'm in Active state now.";

showMsg(message);

if (!hasTested) {

notifyPaused();

moto手机开发的问

题,四级灰度的颜色

值怎么表示?

private final static int

WHITE_COLOR =

0x00FFFFFF;

private final static int

LIGHT_GRAY = 0x00888888;

private final static int

DARK_GRAY = 0x00444444;

private final static int

BLACK_COLOR =

0x00000000;

8

9

GDDC

游戏设计与开发

课程

pauseApp();

}

}

protected void pauseApp() { message = "I'm paused."; showMsg(message); hasTested = true; resumeRequest();

}

protected void destroyApp(boolean arg0) throws

MIDletStateChangeException {

// TODO Auto-generated method stub

}

private void showMsg(String msg) { System.out.println(msg);

}

}

例子中 在MIDlet 处于Active 状态时调用notifyPaused 和pauseApp 方法,使应用程序进这入Paused 状态,在Paused 状态下又调用startApp 方法,重新进入Active 状态。这里设置了一个布尔变量hasTested,目的是为了防止循环。

(3) Destroyed 状态

在Paused 或者Active 状态下,应用管理软件可以调用方法destroyApp,向MIDlet 发出信号终止运行并进入Destroyed 状态。在Destroyed 状态。在Destroyed 状态MIDlet 必须释放所有资源,并保存任何持久状态。

被终止之前,MIDlet 应该执行所有需要的操作,比如释放资源或者保存参数选择或状态,因此可以在这个方法里完成一些清除工作。

moto 手机开发的问题,怎么样程序知道是运行在模拟器上还是在手机上

看IMEI 号。一般手机按"*#06#"就可得到imei 码,每个手机是唯一的。 public

void

paint(Graphics g) { g.drawString("Phone

Parameter:",0, 0, 16|4); g.drawString("IMEI:",0, 30,16|4);

g.drawString(System.get Property("phone.imei"),0, 60,16|4);

g.drawString("Network

Parameter:",0, 90,

16|4);

g.drawString("MCC:"+Sys tem.getProperty("phone.mcc"),0, 120,16|4); g.drawString("MNC:"+Sys tem.getProperty("phone.mnc"),0, 150, 16|4); g.drawString("LAI:"+Sys tem.getProperty("https://www.360docs.net/doc/a69005021.html,i"),0, 180, 16|4); g.drawString("CID:"+Sys tem.getProperty("phone.cid"),0, 210, 16|4); }

游戏设计与开发

这个方法有一个参数unconditional,如果它的值设置为false,就可通过抛出MIDletStateChangeException异常,使MIDlet能够请求不进入Destroyed状态,并

且这将是unconditional标志设置为false时惟一合法的响应。如果为true,MIDlet

被假定处于Destroyed状态,必须清除并释放所有的资源,而不管这个方法是如何终

止的。如果它不是一个unconditional请求,通过抛出一个

MIDletStateChangeException异常,使MIDlet表示它打算处于当前状态,这是一个

比较好的请求,在迟些时候会再次调用destroyApp()方法。

如果在destroyApp期间发生运行时异常,那么这些异常将被忽略,MIDlet被置于Destroyed状态。

MIDlet使用notifyDestroyed()方法通知应用管理软件它已经进入Destroyed状态,应用管理软件将不再调用MIDlet的destroyApp方法,MIDlet所拥有的所有资

源将认为合法收回。MIDlet必须执行它调用MIDlet.destroyApp()方法时一样的操作

(清除,释放资源等等)。

因此在需要退出MIDlet的时候,可以调用notifyDestroyed()方法,而在destroyApp函数中完成一些清除工作。

继续修改MyMIDlet.java前面的代码,使它能够退出应用程序并进行一些清除工作:

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

public class TestMIDlet extends MIDlet {

String message;//声明一个成员变量

boolean hasTested;//声明一个变量,代表是否测试过。

public TestMIDlet() {//在构建函数里进行初始化工作

super();

message = new String("I'm initiated,adn in Paused state.");

hasTested = false;

showMsg(message);

}

moto手机开发的问

题,看别人的game

源代码时,找不到

resource(图片)的

原因:

如果你还没有添加一个

叫做J2ME_RESOURCE_DIR的

新的环境变量的话,建立

他,具体步骤如下:win98

下:编辑c:\autoexec.bat

文件,加入set

J2ME_RESOURCE_DIR=你的

工程目录,重起系统。

win2k下:我的电脑-》属性

-》高级-》环境变量-》系

统-》添加-》名称:

J2ME_RESOURCE_DIR

内容:你的工程目录配好

后,每当你在jcreator中

打开时,就自动转向你的

J2ME_RESOURCE_DIR所指定

的目录

10

11

GDDC

发课

protected void startApp() throws MIDletStateChangeException {//在这里进行要完成的工作

message = "I'm in Active state now.";

showMsg(message);

if (!hasTested) {

notifyPaused();

pauseApp();

}else{

notifyDestroyed();

}

}

protected void pauseApp() {

message = "I'm paused.";

showMsg(message);

hasTested = true;

resumeRequest();

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

message="I'm destroyed.";

showMsg(message);

message=null;

}

private void showMsg(String msg) { 我在运行编译好的程序时,仿真器出现错误警告

我在运行编译好的程序时,仿真器出现Exception: https://www.360docs.net/doc/a69005021.html,ng.NoClassDefFou ndError。请问是怎么回事?

可能有两个:首先,要注意Package路径,例如,对于package

com.mot.j2me.midlets.te st,您的类一定是在以下路径:%ClassPath%\com\mot \j2me\midlets\test\。其次,要注意大小写,例如,test.class和Test.class 是两个不同的类。

游戏设计与开发

System.out.println(msg);

}

}

注意,为了确保MIDlet能够真正退出并进行清除工作,在执行退出功能的代码可以是:notifyDestroyed();

destroyApp(true);

另外,在MIDlet中永远不要使用“System.exit(0);”语句,否则它边应用程序管理软件也退出了。

下面总结了一下本小节讲进的内容,MIDlet类的方法允许应用管理软件生成,启动,暂停和销毁MIDlet,可以认为MIDlet就是应用管理软件通过它的接口运行和控

制其类的集合。它的状态机制允许应用管理软件在一个运行时环境中管理多个MIDlet

的活动,通过分别启动和暂停,它可以选择让哪个MIDlet进入活支状态。应用管理

软件维护MIDlet的状态,并在这个MIDlet上调用相应方法来改变状态。通过实现这

些方法,MIDlet修正它的内部活动,资源的使用由应用管理软件控制。

MIDlet本身也可以发起一些状态改变,并通过调用相应方法向应用管理软件通知状态的改变。

注意,这些方法通过发送信号,通知状态的改变,但是直到状态改变方法成功返回,状态改变才算成功完成,也就是说这些方法调用会立即返回,不等待状态的真

正改变。

14.2.6从MIDlet中访问JAR/JAD属性

类MIDlet中的方法getAppProperty(String Key)给MIDlet提供了一个机制,使它能从应用管理软件获取一个己命名属性,包括所有的定义在清单文件(在JAR文

件中)和JAD文件的属性。如果有同名的属性,则JAD中的属性会覆盖清单文件中的

相应属性。

下面的例子展示了如何从jar/jad文件中读出并打印属性值,请读者根据学过的方法和本章开始的说明,自已生成一个项目,完成这个例子。

MyMIDlet.jar中的manifest.mf文件的内容如下(打开项目目录中bin\子目录下的MANIFEST)MF文件,更改为下面的文件,然后保存:

MIDlet-Version: 1.0.0

MIDlet-Vendor: game college

MicroEdition-Configuration: CLDC-1.0

MicroEdition-Profile: MIDP-1.0

装入png图形文件

时的问题 :

我在装入png图形文件时,

运行时出现如下

Exception:image cannot

be loaded or decoded。可

是png文件在看图软件下显

示很正常。应该如何正确显

示呢?

先要用图形处理软件生成

PNG文件,然后把它转换成

字节数组,内容要一一对

应。PNG的颜色应该为2bit

或1bit,因为硬件设备只支

持4级灰度显示。创建图的

语句应该是如下格式:

Image.createImage(byte[

] imagedata, int

imageoffset, int

imagelength),其中,

imagedata 的格式为:

{;(byte)0x89,

(byte)0x50, (byte)0x4E,

(byte)0x47,

(byte)0x0D,....

12

13

GDDC

游戏设计与开发

MIDlet-Name: MyMIDlet MIDlet-Data-Size:1500 MIDlet-1:MyMIDlet,,MyMIDlet

MyMIDlet.jad 的内容(打开项目目录中bin\子目录下的MyMIDlet.jad 文件,更改为下面的文件,然后保存):

MIDlet-Version: 1.0.0 MIDlet-Vendor: game college MIDlet-Jar-URL: MyMIDlet.jar MIDlet-Jar-Size :1000 MIDlet-Name: MyMIDlet MIDlet-Data-Size:1500 MIDlet-1:MyMIDlet,,MyMIDlet Application-Country :China

其中属性Application-Country 是用户自定义属性。 import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException; public class MyMIDlet extends MIDlet {

protected void startApp() throws MIDletStateChangeException {

System.out.println("Vendor: "+getAppProperty("MIDlet-Vendor")); System.out.println("Application Country:

"+getAppProperty("Application-Country")); System.out.println("MIDlet-Data-Size: "+getAppProperty("IDlet-Data-Size"));

}

protected void pauseApp() {

// TODO Auto-generated method stub

有两个办法让你刚

做好的图片在MIDlet 上变成动画。第一,把图片都放到

一个web 服务器上,让MIDlet 下载他们, MIDP 内置的HTTP 支持。第二个办法更简单,把图片用MIDlet 打包成jar 文件。如果你使用的是J2ME 开发工具,把PNG 文件放你的项目文件里面就可以了。

游戏设计与开发

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

// TODO Auto-generated method stub

}

}

14.3Display类

在第13章,我们曾简单的讲过Display类。用户界面和任何其他API资源一样,根据MIDP应用程序管理的原理进行控制,MIDP中使用类Display进行用户界面的

管理,负责与应用程序管理器进行交互,参见下表。

类Display方法说明

https://www.360docs.net/doc/a69005021.html,ng.Object

|

+--javax.microedition.lcdui.Display

方法

void callSerially(Runnable r)

这个方法用来序列化事件流,使Runnable对象r的run()方法在

重画周期完成之后马上运行

Displayable getCurrent()

获得此MIDLet当前的Displayable对象

static Display getDisplay(MIDlet m)

获得此MIDlet惟一的Display对象

boolean isColor()

获得设备所支持的色彩信息

int numColors()

获得设备所能表示的色彩数目(如果isColor()返回true)或灰度MIDlet套件: 虽

然把MIDlet封装进 Java

档案文件(JAR)并不一定必

要,但这是发布 J2ME/MIDP

应用程序最常见的方法。

MIDlet套件是一个MIDlet

中所有的文件以及作为

MIDlet一部分的必需的资

源的集合。MIDlet套件由以

下几部分组成:1、附在JAR

文件中的 Java类文件,2、

描述 JAR文件内容的清单

文件3、附在 JAR文件

中的资源(如图象)和Java

应用程序描述符文件

(JAD)4、应用程序管理器

14

15

GDDC

游戏设计与开发

课程

级(如果isColor()返回false )

void setCurrent(Alert alert ,Displayable nextDisplayable)

请求这个Alert 的对象被设置为当前的,在Alert 解除之后把

nextDisplayable 设置为当前的

void sdtCurrent(Displayable nexDisplayable)

请求一个不同的Displayable 对象在设备显示屏上可见 从类https://www.360docs.net/doc/a69005021.html,ng.Object 继承的方法:

equals,getClass,hashCode,notify,notifyAll,toString,wait

Display 代表了系统显示屏和输入设备的管理器,包含用来获取设备属性的方法,以及请求要在设备上显示对象的方法,其他处理设备属性的方法主要用于Canvas 对象,这些方法将在介绍Canvas 类时描述。

一个MIDlet 只能有一个Display 实例,应用程序可以调用getDisplay()方法获取此实例的引用。应用程序从调用startApp()开始到destrlyApp()调用返回都可调用getDisplay()方法,期间所有调用getDisplay()返回的Display 对象都是同一个对象。

下面的例子展示了在一个MIDlet 生存周期中如何调用Display 对象: import javax.microedition.lcdui.Display; import javax.microedition.lcdui.TextBox; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

public class TestDisplay extends MIDlet {

Display display;//引用MIDlet 的Display 对象

TextBox tb;//TextBox 是一个Displayable 对象(可显示的控件) public TestDisplay() { display=Display.getDisplay(this);//获取一个Display 实例,它是唯一的.

tb=new TextBox("titile","XYZ",25,TextField.ANY) ;//初始化该控件

应用程序管理器是一

个移动设备上的软件程序,这个应用程序与具体的设备有关,并且由设备的生产商实现。它负责安装、运行以及从设备上删除 MIDlet ,而提供错误处理支持。这个应用程序管理器同时还提供一个可选界面,允许用户启动、终止以及删除 MIDlet 。

游戏设计与开发

}

protected void startApp() throws MIDletStateChangeException {

display.setCurrent(tb);//将当前屏幕设置为该控件

}

protected void pauseApp() {

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

}

在这个例子中,首先声明了两个对象:

Display display;// 引用MIDlet的Display对象

TextBox tb;//textaBox是一个Displayable对象

对象display用来引用设备的Display实例,一个MIDlet的实例是惟一的,在一个程序中可以多次引用此实例,但指向同一个对象。因为TexBox类继承了Screen类,

而Screen类继承了Displayable类,因此textBox对象实例也发型Displayable类,它

将作为参数传递给方法:

void Display.set Currrent(Displayable nextDisplayable);

在构造函数TestDisplay ()中,第一个语句用来获取设备的Display实例,第二条语句初始化一个TextBox类的实例textBox,它也是一个Displayable对象。方法

startApp()中把textBox设置为当前屏幕对象。运行这个程序,应用程序管理器调用

startApp()方法,把这个文本框设置为当前屏幕,如下图所示。TextBox类在下一章会

有详细的介绍。

Java档案文件:

一个商品化的、封装过应用

程序通常由许多文件构成。

除了 Java类以外,其他文

件诸如图像和应用程序数

据即通常所说的资源,也可

能是这个程序包的一部分。

你把所有这些信息捆绑进

一个整体,就称为 JAR文

件。

16

17

GDDC

发课

14.4Displayable类

在显示设备上显示的用户显示的用户界面对象为Displayable对象,在同一时刻

应用程序最多只能有一个Displayable对象,这个Displayable对象显示在显示屏设备上,并通过它进行与用户的交互。这个被引用的Displayable对象称作当前Displayable 对象。类Displayable方法说明如下表所示。

类Displayable方法说明

https://www.360docs.net/doc/a69005021.html,ng.Object

|

+-javax.microedition.lcdui.Displayable

void addCommand(Command cmd)

向Displayable对象添加一个 Command对象

boolean isShown()

检查Displaysble对象在显示屏上是否真正可见

void removdCommand(Command cmd)

从Displayable对象中删除一个Command对象创建一个 JAD文件是基于两个原因:1、向应用程序管理器提供信息,说明 JAR文件的内容,使用这些信息,就可以判断一个 MIDlet是否适合运行在这个设备上。例如,通过查看属性MIDlet-Data-Size,应用程序管理器可以确定 MIDlet 是否需要比设备可以提供的更多的内存。2、提供一种方法,可以把参数传送到MIDlet而不必更改 JAR文件,在本文的后半段我们将看一个这样的例子。

18

游戏设计与开发

void setCommandListener(CommandListener 1)

为这个Displayable 对象设置一个CommandListener 对象,它会取代任何前 面设置的CommandListener 对象

从类https://www.360docs.net/doc/a69005021.html,ng.Object 继承的方法:

equals,getClass,hashClde,notify,notifyAll,toString,wait,

类Displayable 有两个直接子类:Canvas 和Screen,前者是MIDP UI 的低级

API ,后者则是MIDP UI 所有高级组件的父类,因此Canvas 和Screen 及其子类都可作为参数传递给方法Displayable.setCurrent(Displayable nextDisplayable)。

方法isShown()用来检查Displayable 对象在显示屏上是否真正可见。要使对象Displayable,下列所有条件都必须为真。

◆ 此Display 实例所在的MIDlet 必须运行于前台。 ◆ Displyable 对象必须是此Display 实例的当前屏幕。 ◆ Displayable 必须不被系统屏幕所覆盖。

如果此Displayable 对象是当前可见的则返回true,否则返回false.

方法addCommand(command cmd)和removeCommand(Command cmd)分别用来给Displayable 对象增加和删除Command 类,setCommandListener(CommandListener1)用来这为Displayable 对象设置Command 事件监听器。

类Display 的方法setCurrent()用来设置当前Displayable 对象,方法getCurrent()用来获取当有Displayable 对象。应用程序控制当前Displayable 对象。不过并不总是这种情况,另一个线程可能响应其他的事件,改变当前Displayable 对象,当Alert 对象的计时器超时后当前Displayable 对象也将会改变。

应用程序的当前Displayable 对象不一定绘制到屏幕上,用户事件(比如击键动作)的发生也不一定要定向到当前Displayable 对象。在同一个设备上同时运行其他MIDlet 应用程序的时候可能会出现这些情况。

如果当前Displayable 对象在显示设备上是实际可见的,并且如果用户输入设备事件将被传递给它,那么这个应用程序就被作位于前台:如果应用程序不在前台,就不能对显示屏和输入设备进行访问,则被称作位于后台。把这些设备分配给不同的MIDlet 应用程序超出了MIDP 规范规定的范围,它由称作应用管理软件的外部代理进行控制。

应用程序任何时候都有当前Displayable 对象的概念,即使它位于后台。当前Displayable 对象十分重要,即使是对后台应用程序来说,因为当前Displayable 对象

RetroGuard 是Java 混

淆器,使用时先安装JDK 。运行前需要设置PATH 外,还在CLASSPATH 中加入D:\retroguard\RetroGuar d.jar 。然后准备混淆的.jar 文件包。它的格式是:java RetroGuard [输入JAR 文件 [输出JAR 文件[“保留脚本文件” [日志文件]]]], 其中“保留脚本文件”描述了那些类、函数、变量名必须保留,不能被混淆;日志文件是执行后生成的记录文件,记录的错误、混淆情况等信息。对于“保留脚本文件”可以通过一个图形界面RGgui 来设置,执行命令是: java RGgui 运行后,可以根据提示选择输入Jar 文件,选择要保留的类、函数、变量,完成后会自动生成“保留脚本文件”。其实通常情况下只要保留运行的起始类名称就可以了。

19

GDDC

戏设计与开发

课程

总是在下次应用程序进入前台时所要显示的那个。应用程序可以通过调用isShown()方法来判断Displayable 对象在设备上是否可见。如果是Canvas 对象,调用showNotify()和hideNotify()方法可以分别使它可见和隐藏。

(1) 设置当前Displayable 对象

方法setCurrent(Displayable nextDislayable)用来设置Displayable 对象,使它在显示屏上可见。通常这个改变不会立即生效,可能会有延迟,使它能够在两个事件传递方法的调用这间发生,但不能保证在下个事件传递方法被调用之前发生,不过setCurrent()方法会立即返回,而是不用等待改变生效。因为这个延迟,在调用setCurent()之后立即调用getCurrent()方法,不一定会返回传递给setCurrent()的那个值。

对setCurrent()的调用不会使用队列机制,如果一个setCurrent()方法调用延迟,随后再次调用setCurrent()方法,前一个调用可能会被取消,例如如S1是当前屏幕,那么连续调用这两个方法之后:

display.setCurrent(S2); display,setCurrent(S3);

最终的结果会使S3成为当前屏幕,而S2则完取消了。

MIDlet 第一次启动时没有当前Displayable 对象,所以应用程序要负责确保

Displayable 对象是可见的,并且能在整个期间与用户交互。因此应用程序应该总是调用setCurrent(),作为它初始化的一部分。

应用程序可以把null 作为参数传递给setCurrent(),但设置当前Displayable 对象为null 时不会产生效果,相反当前Displayable 对象会保持不变。但是应用管理软件会把这解释为来自应用程序的一个暗示,即应用程序请求被置入后台。如果应用程序已经在后台运行,传递一个非空引用给setCurrent()会被应用管理软件解释为应用程序请求被置入前台的一种暗示,这个请求可把录前Displayable 对象传递给setCurrent()调用,例如下面的代码:

display.setCruuent(display.getCurrent());

这个请求没有效果,只是请求把应用程序置入前台。这些请求仅仅是暗示,而并不要求应用管理软件完全遵照这些请求执行。

(2) 获取当前Displayable 对象

每个MIDlet 应用程序都有当前Displayable 对象,意味着getCurrent()方法总会返回MIDlet 的当前Displayable 对象,而不管MIDlet 是位于前台还是后台。例如假定一个MIDlet 正在运行于前台,它有当前的Displayable 对象F ,一个MIDlet 正在运行于后台,有当前的Displayable 对象B 。当前台MIDlet 调用方法getCurrent(),它将返回F ,当后台MIDlet 调用getCurrent()方法,它将返回B 。并且,如果某个MIDlet 通过用setCurrent()方法改变了当前的Displayable 对象,这不会影响任何其他MIDlet 的当前

PointBase 非常独特,

因为它是第一个经过认证的100%纯Java 数据库,可用于任何使用的 Java 2 标准版虚拟机(JVM)的平台。在2001年6月的JavaOne 大会上,PointBase 发布了PointBase 袖珍版产品——一个为 J2SE 和 J2ME 环境设计的占用资源少的(不到 45KB )数据库。如果你的目标平台包含一个兼容J2ME 的虚拟机,PointBase 允许你部署一个SQL 数据库应用程序。J2ME MIDP 虚拟机目前可用于Win32,Palm OS ,Windows CE 和摩托罗拉IDEN 电话。

游戏设计与开发

Displayable对象。

调用getCurrent()方法还可能返回null,启动期间MIDlet应用程序调用setCurrent()设置它第一个屏幕之前会发生这种情况。即在MIDlet调用setCurrent()方法之前,

getCurrent()方法永远也不会返回一个Displayable对象的引用。

在“设置Displayable对象”小节中已经说明,方法setCurrent()设置一个Displayable 对象,使它显示在显示屏上,但这个改变通常不会立即生效,它可会有延迟。因为这

个延迟在调用setCurrent()之后间隔不久就调用getCurrent()方法,不一定会返回传递

给setCurrent()的那个值。

(3) 系统屏幕

通常情况下,前台MIDlet的当前屏幕在显示屏上是可见的,不过某些情况下系统可能会生成一个屏幕,临时代替应用程序的当前屏幕,这些屏幕被称作系统屏幕(system

screen)。在下列时候会了生这种情况:系统需要显示命令菜单时,或者如果系统需要

用户在一个单独屏幕中编辑文本,而不是在一个表单的文本输入框中编辑。即使系统

屏幕会临时取代应用程序的屏幕,当前屏幕的引用也不会改变,特别是,当系统屏幕

可见时,调用getCurrent()也将返回应用程序的当前屏幕,而不是系统屏幕。不过当前

Displayable对象被系统屏幕覆盖时,调用isShown()返回的值是false.

如果系统屏幕取代了画布(canvas)对象,它的hideNotify()方法会被调用。当系统屏幕消除后,则恢复画布对象,其方法showNotify()和paint()会被调用。如果系统

屏幕被用户用作提交命令,commandAction()方法则在showNotify()方法被调用之后才

调用。

(4)获取设备信息

isColor()和numColors()这两个方法用来获取设备支持的色彩信息。如果

isColor()返回true,表明设备显示屏支持彩色,numColors()则返回设备支持的色彩数

目;如果isColor()返回fslse,表明设备显示屏不支持彩色,numColors()则返回设备支

持的灰度级,如果设备只支持黑白两色,其返回值为2。

由于MID设备的多样性,如果要采用低级API设计程序,那么获取设备支持的色彩信息将十分重要,比如设计游戏等。

下面就是一个获取设备色彩信息的例子,在MIDlet程序中只是简单地调用类Display的isColor()和numColors()方法:

import javax.microedition.lcdui.Display;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

public class TestDeviceColor extends MIDlet {

优化J2ME程序大

小:就是破坏程序的继承

关系。你也许把相关的代码

放到一个或多个抽象类中,

这是OOD中为提高程序间代

码重用的推荐做法。虽然破

坏继承关系与你所学知识

相违背,但简化的继承关系

更有意义。特别的,当你的

的抽象类――可能来自其

他项目――仅仅被继承一

次时,破坏继承关系的结果

不言而喻。例如,例子

MIDlet继承了BasicMIDlet

类,但两者合并为一个类。

20

比较适合开发手机游戏的编程语言介绍

在手机游戏流行的当下,各类手游层出不穷,占据中国流量的半壁江山,各个游戏公司在手游方面的竞争也越发激烈,急缺游戏开发人员,对开发人员的需求也越来越高。如果你也想自己制作手游,做起游戏开发的工作,那么学习Java将会是你不二的选择! Java是目前中国手机软件开发行业的主流语言之一,也是学习的人数最多的,介于目前中国流行的基本都是android系统,所以手机游戏的开发也需要在android的平台下开发。你可以朝这方面学习,不论你是自学还是找培训班,学成后是有很大一片前景的。 学习手游制作的大致方向 Android学习方向的技能: 1、需要javaLogic 也就是java的基本逻辑,牢固的Java基础 2、扎实的Linux基础知识 3、数据库基础知识 4、网络协议

游戏方面: 1、精美的图片、华丽的效果自然离不开flash 图片处理之类的技术 2、搞懂游戏算法,比如你制作一款贪吃蛇的手游,要知道怎么让蛇前进,怎么才算吃了食物变大。 3、进修java与游戏设计,必要的话学点3D设计或美术设计。 设计模式: 1、在Android系统的框架层当中,使用了大量的设计模式,如果没有这个方面的知识,对于Android的理解就会大打折扣。设计模式种类之多,全部掌握是不 现实的,必须首先掌握面向对象的基础设计原则。

2、掌握面向对象的基础设计原则的书籍有: ①《Effective Java》 ②《敏捷软件开发:原则、模式与实践》 服务器端开发知识: 1、Java EE 2、PHP,这是另外一门语言,但在我们学习Java的同时学习,有点得不偿失,是否学习看你自己) 3、.NET与JavaEE差不多,只不过需要额外掌握C#,比较麻烦。 4、ruby on rails,简洁、优雅,几行代码就可实现复杂的功能,不过要有Ruby 语言知识基础。 这些都是Android应用程序需的服务器端支持,掌握这类只是还是有必要的,只不过关于服务器端技术的种类实在太多,这边就列出四个,不过既然你是学的Java,还是建议学习JavaEE的知识。

Android游戏开发(快速入门必备)

Android游戏开发之旅一长按Button原理 今天Android123开始新的Android游戏开发之旅系列,主要从控制方法(按键、轨迹球、触屏、重力感应、摄像头、话筒气流、光线亮度)、图形View(高效绘图技术如双缓冲)、音效(游戏音乐)以及最后的OpenGL ES(Java层)和NDK的OpenGL和J2ME游戏移植到Android方法,当然还有一些游戏实现惯用方法,比如地图编辑器,在Android OpenGL如何使用MD2文件,个部分讲述下Android游戏开发的过程最终实现一个比较完整的游戏引擎。相信大家都清楚Android Market下载量比较好的都是游戏,未来手机网游的发展相信Android使用的Java在这方面有比iPhone有更低的入门门槛。 对于很多游戏使用屏幕控制一般需要考虑长按事件,比如在动作类的游戏中需要长按发射武器,结合Android Button模型,我们实现一个带图片的Button的长按,为了更清晰的显示原理,Android开发网这里使用ImageButton作为基类 public class RepeatingImageButton extends ImageButton { private long mStartTime; //记录长按开始 private int mRepeatCount; //重复次数计数 private RepeatListener mListener; private long mInterval = 500; //Timer触发间隔,即每0.5秒算一次按下 public RepeatingImageButton(Context context) { this(context, null); } public RepeatingImageButton(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.imageButtonStyle); } public RepeatingImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setFocusable(true); //允许获得焦点 setLongClickable(true); //启用长按事件 } public void setRepeatListener(RepeatListener l, long interval) { //实现重复按下事件listener mListener = l; mInterval = interval; } @Override public boolean performLongClick() { mStartTime = SystemClock.elapsedRealtime(); mRepeatCount = 0;

手机游戏开发的5个阶段

目前,开发手机游戏的厂商如同雨后春笋般的冒了出来,有大有小,甚至几个朋友在一起就能攒出一个小公司,进行开发。每个公司,也都有“具备自己特色”的开发过程,好一些的,直接套用传统的软件工程的理论,差一些的,也只能闷头苦干了。我在这里想谈的是对于小团队开发游戏的一种高效的开发方法和阶段划分。 游戏开发的阶段划分,我认为可以划分为5个阶段,叙述如下: 第一阶段:提案 这一阶段要做的主要工作是明确要做什么样的游戏,游戏的名称是什么,采用何种表现方式(2D,2.5D,3D等),游戏的卖点(特色)何在,实现在什么样的平台上,人员如何搭配。 无论是公司还是小团队做游戏的最终目的都是为了盈利,所以做为游戏设计者就应该针对市场来设计游戏,而不能针对个人的喜好而设计游戏。能被大多数人接受的游戏才是一款好游戏,才能更好的盈利。所以在决定做什么游戏之前要先确定主要针对什么样的玩家来做这个游戏,是男孩还是女孩,是老少皆宜还是20多岁的年轻人,这个目标确立了之后才能更好的挖掘这类玩家的心理,使游戏的设计更充分的满足这类玩家心理和精神上的需求,这样游戏才能被更多的玩家接受,团队才能更好的盈利。 根据已选择针对的玩家群体,就该选择适合这个玩家群体的游戏题材,一个游戏题材的选取也非常重要,一个好的题材有助于设计者表现游戏的特色,使玩家很快的了解游戏背景,游戏能够很容易上手,更好的被玩家接受。有三大类游戏题材比较容易被玩家接受:1发布地区人人皆知的历史或宗教;2与常识相关的;3与某有名的故事或电影相关的。总之,在所选玩家群体大部分玩家都熟悉的题材上做游戏会更容易被玩加接受。 然后就是有关游戏概念的设计,需要确定的是游戏的类型(例如:RPG、策略、格斗等),游戏的表现方式(例如:2D、2.5D或3D),在什么平台上实现以及游戏的特色。这些问题都要根据团队的技术实力、市场需求的紧迫程度、开发成本等各方面因素来决定。在确定了游戏的类型、表现方式和实现平台之后,就要在这三个条件的限制之下尽可能的发挥策划的创造力,在游戏特色上尽可能的下功夫,并写出两份文档:一份游戏策划案的提纲和一份立项建议书。在策划案提纲中要让技术人员能够看明白游戏需要具有什么样的功能。在立项建议书中要写清游戏针对的人群,游戏类型,游戏表现方式,游戏实现平台,游戏卖点,实现所需的大致时间,以及人员安排。 完后,招集市场、技术、美工等人员进行集体评审,根据这份立项建议书,客观的评价技术实力,开发周期,市场效应等问题,最终决定是否要做这个游戏。 这个阶段的工作目标就是确定将要做的是一个能被市场广泛接受的游戏并确保游戏的可行性。一个不能被市场接受的游戏或者根本无法实现的游戏设计在这个阶段都会被否定,或做设计上的修改或放弃做这个游戏。尽可能的减少项目实施以后所要承担的风险。 第二阶段:设计 游戏的设计过程中需要策划、程序、美术、市场共同协作完成,一个游戏做得好坏,这个阶段起到了决定性作用,下面将对这四种职责的工作内容分别进

手机游戏作品开发- 课程教学大纲

《手机游戏作品开发》课程教学大纲 一、课程基本信息 课程名称:手机游戏作品开发 课程编码: 课程性质:职业岗位限选 总学时:24+12 总学分:2 考核方式:考查 开课学期:7 适用专业:数字媒体技术专业 先修课程:计算机应用基础,Java 教研室: 执笔人: 审核人: 编写(修订)日期: 二、教学目标 本课程以案例教学为主线,循序渐进地介绍Android游戏开发的基本知识与技巧。 通过本课程的学习,熟悉Android的操作环境,掌握Android项目结构、项目结构、资源管理、生命周期、布局与基础组件、事件处理、多线程与消息处理、游戏视图、图形特效、游戏动画等基本知识,并能运用所学知识及所掌握技能实现简单游戏的构建及发布,为培养游戏制作专业人才打下坚实的基础。 三、教学内容及要求 第1部分 Andorid基础知识(理论2学时) 主要内容及要求: 了解Android的体系结构、特性及版本,掌握Android开发环境搭建,掌握Android的生命周期,掌握Android应用的国际化方法,了解Android的计量单位,学会Android项目的运行和调试,掌握Android项目资源的创建与使用,掌握消息提示以对话框的使用。 重点、难点: Android project项目结构,Android资源使用,消息提示以对话框 其它教学环节: 1.下载JDK,Eclipse,SDK,ADT,安装并配置Android开发环境 第2部分 Android游戏开发之视图界面(理论12学时) 主要内容及要求:

掌握5种布局管理器的使用,掌握游戏开发的常用组件,熟悉使用xml和Java代码混合控制ui界面,掌握Android的生命周期,掌握activity页面切换及传递数据的方法,掌握Android的事件处理机制 重点、难点: 基本程序单元――活动,Android事件处理 其它教学环节: 实验视图界面程序设计 1、实验类型:基础性、验证性 2、实验学时分配:6学时 3、每组人数:1 4、实验内容及要求:认真完成相关实验,掌握视图界面相关知识与技巧 第3部分 Android游戏开发之图形界面(理论10学时) 主要内容及要求: 掌握消息类Message的应用,掌握消息处理类Handler的应用,掌握子线程中更新ui 的方法,掌握View和SurfaceView视图框架,掌握Canvas画布和paint画笔的应用,掌握位图操作方法,掌握图像特效设置,掌握动画 重点、难点: 线程与消息处理,Android二维游戏开发视图 其它教学环节: 实验二维图形界面程序设计 1、实验类型:基础性、验证性 2、实验学时分配:6学时 3、每组人数:1 4、实验内容及要求:认真完成相关实验,掌握图形界面相关知识与技巧 四、教学策略与方法 教学策略:拟采用案例驱动策略组织教学活动 教学方法:拟采用教授法、演示法、训练和实践法等教学方法实施教学活动 五、教材与学习资料 教材:Android游戏开发案例教程,张辉主编,清华大学出版社,2015.6。 六、实施本教学大纲应注意的问题 该课程是一门实践性很强的应用学科,为达到教学目标,建议 1.授课地点为多媒体实验室,采用多媒体广播教学,理论联系实际,充分运用案例驱动教学,让学生有边看边学边实践的机会。 2.在教学时根据课程特点、学生情况、专业特点,实践课与教学进度同步进行。

手机游戏开发流程

J2ME游戏开发流程 一款J2ME游戏的开发流程大致如下: 以下为文字描述: 1、立项 在制作游戏之前,策划首先要确定一点:到底想要制作一个什么样的游戏?而要制作一个游戏并不是闭门造车,一个策划说了就算数的简单事情。制作一款游戏受到多方面的限制:市场:即将做的游戏是不是具备市场潜力?在市场上推出以后会不会被大家所接受?是

否能够取得良好的市场回报? 技术:即将做的游戏从程序和美术上是不是完全能够实现?如果不能实现,是不是能够有折中的办法? 规模:以现有的资源是否能很好的协调并完成即将要做的游戏?是否需要另外增加人员或设备? 周期:游戏的开发周期是否长短合适?能否在开发结束时正好赶上游戏的销售旺季? 产品:即将做的游戏在其同类产品中是否有新颖的设计?是否能有吸引玩家的地方?如果在游戏设计上达不到革新,是否能够在美术及程序方面加以补足?如果同类型的游戏市场上已经有了很多,那么即将做的游戏的卖点在哪里? 以上各个问题都是要经过开发组全体成员反复进行讨论才能够确定下来的,大家一起集思广益,共同探讨一个可行的方案。如果对上述全部问题都能够有肯定的答案的话,那么这个项目基本是可行的。但是即便项目获得了通过,在进行过程中也可能会有种种不可预知的因素导致意外情况的发生,所以项目能够成立,只是游戏制作的刚开始。 在项目确立了以后,下一步要进行的就是进行游戏的大纲策划工作。 2、大纲策划的进行 游戏大纲关系到游戏的整体面貌,当大纲策划案定稿以后,没有特别特殊的情况,是不允许进行更改的。程序和美术工作人员将按照策划所构思的游戏形式来架构整个游戏,因此,在制定策划案时一定要做到慎重和尽量考虑成熟。 3、游戏的正式制作 当游戏大纲策划案完成并讨论通过后,游戏就由三方面同时开始进行制作了。在这一阶段,策划的主要任务是在大纲的基础上对游戏的所有细节进行完善,将游戏大纲逐步填充为完整的游戏策划案。根据不同的游戏种类,所要进行细化的部分也不尽相同。 在正式制作的过程中,策划、程序、美工人员进行及时和经常性的交流,了解工作进展以及是否有难以克服的困难,并且根据现实情况有目的的变更工作计划或设计思想。三方面的配合在游戏正式制作过程中是最重要的。 4、配音、配乐 在程序和美工进行的差不多要结束的时候,就要进行配音和配乐的工作了。虽然音乐和音效是游戏的重要组成部分,能够起到很好的烘托游戏气氛的作用,但是限于J2ME游戏的开发成本和设置的处理能力,这部份已经被弱化到可有可无的地步了。但仍应选择跟游戏风格能很好配合的音乐当作游戏背景音乐,这个工作交给策划比较合适。 5、检测、调试 游戏刚制作完成,肯定在程序上会有很多的错误,严重情况下会导致游戏完全没有办法进行下去。同样,策划的设计也会有不完善的地方,主要在游戏的参数部分。参数部分的不合理,会导致影响游戏的可玩性。此时测试人员需检测程序上的漏洞和通过试玩,调整游戏的各个部分参数使之基本平衡。

安卓(Android)游戏以与手机游戏开发的详细流程

安卓(Android)游戏以及手机游戏开发的详细流程【精华版】 >>首先说游戏设计部门 通常这是如下职位:游戏设计主负责(也有称主策划) 执行游戏设计师(称执行策划):分剧情策划,数据策划,也有不分的,大家一起提高。辅助员(称辅助策划):做一些比较简单的表据维护,资料收集。 工作职责: 游戏设计主负责人:主要负责游戏设计的整体把握、给大家安排工作,审核工作,提高部门人员士气。, 剧情策划一般负责背景,任务等等故事性比较强的,要求文笔要好 数据策划再细分,为规则和数据平衡,包括规则的描述,公式确定,数据表设定等等。 辅助员,主要是收集资料,维护表格等等,比较不涉及核心的工作。 *注:有一些公司或者团队,在策划岗位,还有新的岗位,如: 表现策划:主要负责特效、动作、音效收集并提需求,部分如音效部分亦有策划来完成。资源策划:主要负责UI设计,模型相关配置,资源管理等等。

>>下面是程序部门 主程序与主设计师,是对游戏引擎最了解的人,以主程序为最强。主程的主要工作,安排程序部门工作,定游戏的数据结构,定一些主要方案的完成方法。 一般程序员,分服务器端与客户端、服务器端程序,对于数据库结构,数据传输、通讯方式等等。客户端程序,对图像及优化有研究的会易受重用。 >>美术部门 主美负责整体美术风格的把握 原画绘制原画交于3D 2D负责贴图,游戏界面等的制作 3D负责3D建模,动作等方面工作 >>脚本与编辑器 在具体游戏实现时,越来越多的公司不会说把游戏中的数据写在C++里,而是用“脚本与数据库”的方式。 C++的作用是用来解释脚本和调用数据库的 在脚本中,写上, if

手机游戏制作开发流程

手机游戏制作开发流程 1、产品选择和周期控制 手机游戏的开发周期尤其是JAVA,BREW游戏的开发周期比较短,游戏的开发周期的长短对于整个的开发团队和相关的管理层是有很大影响的。一般JAVA,BREW游戏的开发周期掌握在一个月内,不过也要看游

戏本身设计情况—发游戏需要制定一个团队的发展战略和方向,一个成熟的开发和验证标准,通过团队的意见,形成团队的开发体系。围绕游戏开发标准进行合理恰当的主题选择。最初需要解决一个开发什么类型或是大概是怎么开发思路让所有的团队成员能够认可这样的产品类型选择策略。一般意义上是结合2方面的因素来分析产品策略选择,一个是外部市场分析,

包括产品类型,游戏的内容,玩法,上市地等进行信息收集和总结,细分市场。另外的一个就是分析下,团队的开发能力,市场宣传能力,资金能力,资源状况等。从内部找问题是最为主要的,但是也不能说有市场我们虽然做起来有困难,委琐了。市场的缔造者一般都是技术领先或是市场占有领先的,需要一个长期的历练过程。一个团队做事情,刚开始最好不要去 y2t0d 手游 https://www.360docs.net/doc/a69005021.html, 手机游戏

选择比较大的游戏内容,这对于刚组建的团队不是一个很好的练习模式,从小的游戏入手,可以参考市面上游戏,第一个项目一定要控制在1个月之内。当完成虽是一个小项目后,团队成员也会很高兴。 2、制作过程 产品需要有一个提案,提案主要阐述游戏的介绍,

操作和其优势何在。这个提案可以由热呢后人来提出,但是要知道,在你提出这样的一个游戏思路后,很快你将受到其他人的意见。甚至是你自己也发现这样的一个游戏毫无意思。你由原来的简单的想法,变成怎样去维护这样的一个主题。很多都会花不少的时间去开会,仔细研究讨论,你提出的这个游戏思路是否可性。有时候,甚至需要1天的时间来讨论。这样的方 y2t0d 手游 https://www.360docs.net/doc/a69005021.html, 手机游戏

手机游戏app开发

游戏app开发 在2012全球移动互联网大会进行之时,公司在分会场举办了QQ游戏无线平台战略发布会。腾讯无线业务负责人、高级执行副总裁刘成敏发表演讲。他表示,各位游戏开发者将是移动互联网领域率先赚到钱的人群,相比其他方向,游戏开发者应该更有信心。此外,他鼓励开发者进行更多创新,并坦诚向腾讯反馈合作问题。 游戏产业本来是创意产业,创新产业,我希望在这里的话,不搞恶性竞争,不搞模仿跟随,要是光搞模仿跟随,我们自己搞就就行了,就不邀请大家了,我们要跟随别人的话,我们比你跟随还快,力量更强,我们希望大家创新,我

们构造平台,在平台运作过程中,有哪些问题,希望给我们的经理坦诚的反馈,因为你越坦诚,反馈越激烈,我们解决问题速度越快。我们也是大企业,大公司,在游戏平台这个项目,我们一个部门在运作,我们有很多平台很多项目,所以需要一些时间,把这些流程,还有对大家的服务理的很顺,希望大家尽快反馈问题,推动我们进步--广州木铭网络有限公司。 广州木铭网络科技有限公司是香港帝爱国际集团有限公司旗下一家专业从事互联网事业发展、建设的全新技术型公司,专业从事网站建设,APP开发,微信开发、网络通信开发、网

络营销策划。公司现已培养了一大批充满激情与斗志的高素质专业人材,公司团队不断借鉴学习国际最先进的专业技术,并不断创新,一直走在互联网行业的前端。目前公司已与数百家企业公司,外企公司。 交易流程 1、预定之前请您先通过猪八戒网与客服咨询沟通,您所需大致想法和需求。开发用是根据需求功能和难易程度而定。 2、双方设定合作意向,您下单购买服务;因此服务是技术开发,所以在确定开发概要设计后,我们将要求客户支付首付款及按进度付款,具体付款进度由双方协商。 3、购买服务,以木铭网络科技在猪八戒公示出售的服务标准内容为准;雇佣木铭网络科技以雇佣清单约定的内容为准;超过约定内容的开发服务我方有权拒绝提供,或者在我方同意的基础上增加相应预算。 4、开发周期由开发难易程度而定。 5、开发过程中,买家可以监督开发进度。 参考报价

手机游戏开发基础(经典)

1 第十四章 手机游戏开发基础 MIDP 中定义的UI (用户界面)从逻辑上包括两组API :高级API 和低级API 。高级API 通过应用高层抽象实现,它主要强调可移植性。而实际的绘制于用户交互处理则有实现具体来完成。使用高级API 的应用程序对于组件的显示外观只有有限的控制权,它只能访问高级UI 事件。 另一方面,通过使用低级API ,应该程序可以完全控制外观,而且可以直接访问输入设备并控制由用户交互产生的重要事件。但低级API 可能是与某一固定设备相关的,即可能只在某一设备上可用。所以,使用低级API 的应用程序在可移植性上会大打折扣的。这也是所有开发人员比较头疼的事,在某款手机上开发的游戏,在其他机型上就有可能运行不了,还得需要代码上的改动,而且这种代码上的改动有时会很大的,那么要求开发人员在做游戏的过程中,时刻注意游戏的可移植性问题。 简单的说,高级API 由于控制不了控件的外观,所以一般来说,高级API 都用于手机上的应用或游戏当中的参数设置(如:游戏的关数、难易程度),相反,因为低级API 可以随意在手机屏幕上画各种各样的内容,而且能够很方便地得到用户的输入(包括触摸方式),所以在游戏过程中,主要用的还是低级API 。 本章将讨论手机游戏开发用户界面的一些基础知识,而后两章将介绍使用高级API 和低级API 的UI 开发。 14.1 MIDLET 程序开发的基本方法 1) 编写源代码,生成.java 文件。 2) 编译、预校验,生成.class 文件。 3) 在模拟器上运行并测试。 4) 打包生成jar 文件。 5) 下载到真机上测试。

2 MIDlet程序开发的基本流程图 14.2MIDP 程序类 MIDLET 在上一章节,我们通过一个简单的例子,介绍了MIDlet的生命周期,已经对MIDlet有了一个初步的认识,下面我们要系统地学习一下MIDlet。 14.2.1MIDlet 类介绍 一个MIDP应用程序称作MIDlet——MIDP小应用程序,它不能够单独地运行,必须运行在特定的环境之中,或者说运行在一个容器中。可以把这个容器看作是个大的应用程序,它运行在Java虚拟机之上,但不能完成任何特定的任务,因此需要程序开发者编写代码以完成一项工作,这些编写的程序就称作小应用程序。这样设计的目的是为了让它能在所有的容器中运行,这些容器实现可能不同,但容器的内部却是相同的。 通过这种形式,程序开发者就从各种运行环境、各种设备中解放出来,只需设计一个MIDlet,就可以在不同的浏览器上运行。比如不同的厂家、不同型号的手机,只要它支持J2ME、支持MIDP,就有这样一个容器。至于这个容器的外部形状如何,程序开发者不必考虑,因为容器的内部都是一样的,只要编写规范的小应用程序就行了。 MIDlet中这个容器就是MIDP实现,它以SUN公司发布的CLDC规范和MIDP 规范为标准,然后针对设备进行移植,从而提供给所有的MIDlet都一样的容器内部接口。编写MIDP应用程序的要求就是必须扩展MIDlet类,这个类定义了一些接口,JAM可以通过这些接口对MIDlet进行控制。MIDlet类位于以下包中:java.microedtion.midlet,因此,在所有的MIDlet中,都必须引入这个包:import javax.microedtion.midlet.*。注意:这里midlet表示包时必须小写,而MIDlet类的前三个字母大写。在本书中,称MIDP应用程序为MIDlet,可以表示整个应用程序,也可以只表示扩展了MIDlet类的子类,即MIDP应用程序的主类。 14.2.2midlet包介绍 midlet包对MIDP应用程序进行了定义,也定义了应用程序和它所运行的环境之间的接口,如前面所述MIDP应用程序被称作MIDlet。 midlet包中只有一个类——MIDlet,它是MIDP应用程序必须要扩展的父类,还有一个异常类——MIDletStateChangeException,它用来监测MIDP应用程序状态的改变。Midlet包整个层次结构如下: class https://www.360docs.net/doc/a69005021.html,ng.Object

手机游戏的设计与开发

毕业设计说明书 手机游戏的设计与开发 学 院: 专 指导教师: 2010年 6月 软件学院 通信技术

手机游戏的设计与开发 摘要 J2ME(Java 2 Micro Edition) 是近年来随着各种不同设备,尤其是移动通信设备 的飞速发展而诞生的一项新的开发技术。它的目标定位在电子消费产品与嵌入式设备上,对设备的智能化、多样化,提供了革命性的解决方案,并因其“Write Once, run anywhere”的Java特性而提高开发的效率 在可以搭载Java的终端设备中,移动电话可以说是最为普及的,随着无线通信业 的发展,Java应用程序在通信、娱乐等应用上产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。本论文着眼于J2ME技 术在手机娱乐上的应用,开发一个的基于MIDP2.0的手机游戏程序——拼图游戏,并介绍了游戏的结构分析和具体功能实现。游戏的界面和运作方式,尽力模拟手机游戏的普遍性形式,成为一个完整的手机游戏。 关键词:J2ME,手机游戏,拼图

Design and development of Puzzle on mobile phone Abstract J2ME (Java 2 Micro Edition), a newly-developed technology due to different kinds of equipment in recent years, especially the rapid development of mobile communication equipment, with the target of electronic expense product and embedded equipment has provides the revolutionary solution to the equipment intellectualization and diversification and acc elerates the developing efficiency for its natural Java characteristics, like “write once, run anywhere”. Along with the development of wireless communication, the mobile phone is the most popular in the terminal device can be embarked with Java. The Java application procedure manifests noticeable influence in the field of mobile phone value-added service communication and entertainment and also plays an important role of the enrichment people’s life content and prompt information. The paper focuses on the J2ME technology in the field of the application of cell phone entertainment to develop a game procedure based on MIDP2.0- puzzle game, and then introduced the game structure and its function realization. It aims to complete a mobile phone game by changing the interface and operation through imitating the universal form. Become a perfectly game on mobile phone. Keywords: J2ME, mobile phone game, puzzle game

Android手机游戏开发课程设计

目录 一、Android手机物联网背景和发展趋势 (2) 1.1 Android背景 (2) 1.2 Android发展趋势 (2) 二、物联网背景和发展趋势 (3) 2.1 背景和发展趋势 (3) 2.2 Android手机物联网发展的重要性和迫切性 (3) 三、掌握手机游戏的基础 (4) 3.1 获取SDK (4) 3.2 学习应用架构 (4) 3.3 学习应用的生命周期 (4) 3.4 主循环 (5) 四、Android手机开发平台介绍 (5) 3.1 平台特色 (5) 3.2 ICES-M6 Android手机开发平台详细介绍 (6) 五、附录:手机游戏开发的主要厂家 (8)

一、Android手机物联网背景和发展趋势 1.1 Android背景 Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux 平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件。 1.2 Android发展趋势 据职酷网2011年6月数据统计显示:目前热招的Android技术相关岗位约有3882个,而一个月内的有效岗位量在2298个。主要热招职位包括Android开发工程师、Android软件工程师、Android应用开发工程师、系统驱动工程师,Android手机游戏开发、Android 系统软件开发、Android程序员、Android游戏应用版本管理、人机交互分析工程师、Android 中间层开发工程师等。 从人才需求类型来看,目前对Android人才需求一类是偏向硬件驱动的Android人才需求,一类是偏向软件应用的Android人才需求。从目前的招聘需求来看,后者的需求最大,包括手机游戏、手机终端应用软件和其他手机应用软件的开发。据职酷网职位搜索库统计显示,目前企业对这类应用软件的Android开发人才占总需求的72%。 职业专家分析说,由于目前Android技术较新,无论是相关书籍、培训还是大学教育,都处于初级阶段,因此Android人才短期将供不应求。从长期来看,随着各种移动应用和手机游戏等内容需求日益增加,也将激励大中小型手机应用开发商加大对Android应用的开发力度,因此Android人才的就业前景也非常广泛。

从事独立手机游戏开发的10个心得

从事独立手机游戏开发的10个心得 厦门欧页科技 经过了最近的反思之后,我认为我最好还是给手机游戏开发社区分享一些这么久以来的心得。去年我们就组成了现在的公司,但是真正开始游戏研发是从2014年11月份开始的,我们目前的手机游戏开发团队规模是4人。所以其他闲话不多说,这里我分享从事独立游戏研发一年多以来的10个心得,希望能够给大家有所帮助: 其实,一年的手机游戏开发经历让我写在纸上的东西比敲出来的字更多 1.做好应变准备 优化和改变是优秀手机游戏开发设计和玩法创作的核心,你不能对于自己做出的每样东西都敝帚自珍,,有些事是你应该妥协的,还有些东西则不能妥协,所以你在研发期间需要进行选择。大量的改变可以让你的游戏与最初的想法天差地别,但在看待这些的时候,要从改变的角度出发,‘我现在手机游戏开发做的更好了,如何才能让游戏也变得更好?’ 然而,有一点需要记得的是,你的游戏核心一定要保留而且永远不要妥协。把游戏想法做成现实的一些关键要素是不能被破坏的。所以,找到你自己想要做什么、知道你的游戏可以改变什么,然后为此做出改变。 2.计划是关键 强迫自己做计划看起来是个巨大的麻烦,特别是当你只想做手机游戏开发的时候,不过,做项目规划是非常重要的。如果因为没有合理地规划时间而导致游戏制作延期,至少会影响到所有人。当然,对于非常小的团队来说,计划似乎没有那么重要,因为你不需要和那么大的团队进行沟通和协调,但是,能够大概估算出自己在做的事情需要多久时间完成也是很重要的。 如果不出意外的话,你可以用这个机会认真了解游戏而不是做一个投入了几周时间打造的很酷的机制。在规划中看到全局可以让你知道手机游戏开发项目发展到了哪一步,在大方向上需要改变什么东西,这可能是个非常痛苦的过程,而且还会耽误你的研发时间,但良好的计划可以帮你节约时间并且在长期时间内带来好处。 3.给自己定一些可以衡量的标准 你到底在做什么游戏?认真地想一想,你为什么做这样的游戏?这样看起来很傻,但通过这些问题得到目标答案是非常好的想法。你可以说自己希望做一个最小化风格的游戏,比如《Papers,Please》或者一些比较聪明的玩法,把这些游

相关文档
最新文档