当前位置:文档之家› 手机游戏开发基础(经典)

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

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

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.doczj.com/doc/9e15552933.html,ng.Object

3

class javax.microedtion.midlet.MIDlet class https://www.doczj.com/doc/9e15552933.html,ng.Throwable class https://www.doczj.com/doc/9e15552933.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 构造函数

4

接着可以为自己的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 {

5

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 执行的代码,比如调用自定义方法,或者其类对象方法等。

6

例如下面的代码:

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

}

7

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 状态

8

在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();

9

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 应该执行所有需要的操作,比如释放资源或者保存参数选择或状态,因此可以在这个方法里完成一些清除工作。

10

这个方法有一个参数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);

}

11

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) {

12

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

13

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

14

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

// TODO Auto-generated method stub

}

}

14.3Display类

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

类Display方法说明

https://www.doczj.com/doc/9e15552933.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)或灰度

15

级(如果isColor()返回false )

void setCurrent(Alert alert ,Displayable nextDisplayable)

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

nextDisplayable 设置为当前的

void sdtCurrent(Displayable nexDisplayable)

请求一个不同的Displayable 对象在设备显示屏上可见 从类https://www.doczj.com/doc/9e15552933.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) ;//初始化该控件

16

}

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类在下一章会有详细的介绍。

17

14.4

Displayable 类

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

类Displayable 方法说明

https://www.doczj.com/doc/9e15552933.html,ng.Object |

+-javax.microedition.lcdui.Displayable void addCommand(Command cmd)

向Displayable 对象添加一个 Command 对象 boolean isShown()

检查Displaysble 对象在显示屏上是否真正可见 void removdCommand(Command cmd) 从Displayable 对象中删除一个Command 对象

18

void setCommandListener(CommandListener 1)

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

面设置的CommandListener 对象

从类https://www.doczj.com/doc/9e15552933.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对象

示选择输入

要保留的类、函数、变量,完成后会自动生成

本文件”。其实通常情况下只要保留运行的起始类名称就可以了。

19

总是在下次应用程序进入前台时所要显示的那个。应用程序可以通过调用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 的当前

20Displayable对象。

调用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 {

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

在手机游戏流行的当下,各类手游层出不穷,占据中国流量的半壁江山,各个游戏公司在手游方面的竞争也越发激烈,急缺游戏开发人员,对开发人员的需求也越来越高。如果你也想自己制作手游,做起游戏开发的工作,那么学习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的知识。

手机游戏设计案例分析

设计心理学:好玩的iPhone游戏怎么设计? 心理导读:游戏设计心理学中,涉及到肌肉记忆、长期记忆、短期记忆、识别与回忆等概念。快来看看一款有趣好玩的iphone游戏是怎么设计出来的! 几乎所有iPhone用户都曾使用过游戏应用,这是一个“全民游戏”的时代。iPhone应用程序中,游戏不但在下载量方面首屈一指,在设计质量上也不乏可圈可点之处。本人从大量的游戏应用中大浪淘沙,试图从中汲取营养,探索好的设计策略为我所用。 基本思路是: 步骤一,提出小问题或小测试,请跟随我思考一下; 步骤二,引出其中的深层原理; 步骤三,此原理在iPhone游戏中的体现; 步骤四,给我们哪些启示? 通过以上步骤,简单地介绍肌肉记忆、长期记忆、短期记忆、识别与回忆、事物预设的特点,以及对用户界面设计的影响。文章篇幅和个人能力有限,对每一个原理不能作过多的挖掘,只愿可以抛砖引玉启发大家一些思考。 一、肌肉记忆 步骤一,请思考: 一天早上,你起床起晚了,十万火急地驱车去公司。来到叉路口,一个路人告诉你:这有条近道。这时候你面临着两个选择:一条道路是自己每天都走的路,非常熟悉;另一条道路你从来没有走过,有很多的不确定因素。此刻,你会选择哪一条道路?

大部分人会选择自己熟悉的那条路。 这条路自己太熟悉了,“闭上眼都能走回家”,脑子几乎不用思考,路即使远一点也不会觉得慢。相比之下,路人为你指的近路,可能还会有你不知所措的岔路口,一旦走错,近路就成了耽误时间的远路。 步骤二,其中的原理:肌肉记忆 人体执行某操作时的效率及准确性,很大程度上取决于是否接近该人熟悉的操作路径。如果操作被重复多次,肌肉就会形成条件反射,生成记忆效应。大脑皮层还没有做出决定,脑干和脊髓神经已经领先一步进行指挥了。如果操作处于新接触阶段,不确定性较多,此时做出决策的是大脑皮层。大脑皮层做出决策所花费的时间要比脑干和脊髓神经做出反应的时间长。 举一个例子:新手学车的时候,多用大脑皮层,执行挂档、倒桩等操作慢而且不连贯,容易出错。驾车老手执行刹车、变换档位更多的是潜意识操作,速度更快、准确性更高,是由脑干和脊椎神经指挥的。 从速度、准确性方面讲,用户熟悉的操作路径可以使操作行为更从容。操作路径如果过于新颖或者很难摸索,即使操作步骤缩短,也不见得会比用户熟知的路径更快更好。 步骤三,在手机游戏中的体现:

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;

手机游戏策划规范准则

手机游戏策划规范准则 希望对手机游戏开发有所帮助! 一个游戏制作公司要有一个风格,切忌那种什么都想做,觉得什么都能做的思想,这其中的利弊是不言而预的,同时要最大限度的利用已有引擎来制作游戏,同时不断升级引擎(如果该引擎有升级的必要)。这是一个技术风格的确立, 同时还要有一个游戏风格的确立,这种风格如同企业文化的风格类似,如暴雪就属于欧洲神话和超现实风格,中国目标主要以中国古典风格等,确定了这两个风格,为以后公司在确定发展方向中确定了定位。 市场调研(根据公司风格来进行针对性的资料收集) 市场调研期间需要制作的文件有“销售资料”“项目信息” a)收集市场的资料包括市场部门提供的销售资料和收集的反馈信息及从销售商处取得的其他游戏的销售记录 i.包括个人经验,ii.各类游戏的销售数量、销售商对市场的需求意愿、 iii.可由市场人员进行整理,iv.并根据市场人员的工作记录来整理资料 v.资料名vi.称:市场调研-销售资料 vii. b)其他厂商正在制作的项目(做一定的了解即可) c)将要引进的游戏项目 i.包括项目类型、预定运营方式、上市时间、价位、市场定位,ii.技术成分、宣传方式等 d)市面上正在流行的游戏项目 i.游戏名ii.称,iii.排名iv.、类型、玩点 e)玩家对项目的建议和意见收集(去弊求实) 以上B、C、D、E统一制成表格文件:市场信息-项目信息 研究分析 研究分析期间需要制作的文件有“立项报告”“项目初期策划文档” f)当资料收集完毕后,g)根据公司风格和资料进行分析,h)期间需考虑公司现有的技术资源和技术能力的影响。 i)完成项目立项报告:内容包括项目名j)称、立项人、立响时间、基本玩法玩点、故事背景,k)消费群等,l)可以同m)时交付多个立项报告用来挑选。 n)某立项报告一旦通过,o)则需要对该报告进行深入内容的工作。命名p)为项目初期策划文档 项目初期策划文档内容包括:游戏类型、世界观设定、玩法玩点总结、开发计划、资金预算、工作量预估、人员预估

手机游戏设计5大要素

详解手机游戏设计5大要素及其重要性 电子游戏行业正在发生改变。随着使用手机平台联络、工作和娱乐的人数日渐增多,电子游戏行业也不得不朝该方向转变。行业的变迁使得优秀电子游戏的核心要素也同样有所改变。那些大型游戏正逐渐淡出我们的视线。在本篇博文中,我要探讨的是所有优秀手机平台电子游戏带有的5个要素,有情感、目标、游戏玩法、需要克服的障碍和成就感。我会详细分析每种要素,阐述为何它们如此重要。 情感:游戏需要让玩家在娱乐时产生某种情感。“情感”在此背景下是种泛称,玩家可能忧伤、滑稽、轻松、紧张等。这些都是玩家在游戏过程中能体验到的传统情感。重点在于,确保游戏不会无意间让玩家产生消极情绪。比如,如果失意或愤怒不是你预想让玩家产生的情感,那么最好别让这些出现在游戏中。在手机游戏领域里,情感也能够测试玩家的反应能力、敏捷才思或解决问题的批判性思维。我认为情感在游戏中的定义是:游戏给玩家带来的感觉,当他们想再次玩游戏时,他们会想起那种情感然后对自己说道“我想再玩玩那个游戏”。多数情况下,手机游戏都是对游戏玩法关注甚于情感的休闲游戏,但即便此类游戏也深藏着轻松有趣的情感。尽管大部分人觉得手机游戏只是他们下班乘坐地铁时打发时间的玩物,但我想说的是游戏设计师确实对作品让玩家产生的感觉尤为关注,确保游戏能够描绘出那种情感。明智的设计师都会这么做。 目标:你想要在游戏中完成的事物。玩家需要一个玩游戏的理由。玩家在《愤怒的小鸟》中需要杀死所有的绿猪,《Bonsai Blast》让人们于不同环境中在不同颜色小球移动到道路尽头前将它们配对。每个游戏都有自己的目标。目标可以提升游戏整体趣味性,因为实现目标的过程,也就是游戏玩法恰是让游戏有趣的原因所在。 游戏玩法:游戏玩法指玩家实现目标和克服障碍的方法,可以是用弹弓发射小鸟来杀死猪,抑或是将相同方块配对成链。游戏玩法元素是游戏体验中最重要的部分,因为用户真正控制和互动的是该部分内容。这是为游戏带来乐趣的重点要素。手机游戏应该有简单却令人着迷的游戏玩法,而且让游戏本身对其加以解释。如果无法在游戏过程中展现游戏玩法,那么解释应只限于单屏篇幅。我们需要认清的事实是,没有人希望自己在手机屏幕上翻看

手机游戏开发的5个阶段

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

手机游戏的策划方案

《王者之刃》手机游戏的策划方案 1.游戏名称 《王者之刃》 2.游戏基本介绍 故事发生在虚拟魔幻世界中一块独立的魔幻大陆,几百年前,大陆曾是一个统一的国家,由于国王的三个儿子都想继承王位,于是一位邪恶的巫师从挑拨,导致国家发生内战,为了平息战乱并获得王位,大王子利用黑暗的力量统一了整个大陆,战乱虽然平息,但是隐藏的危机却源源不段,仿佛黑暗中一股强大的虎视眈眈的想随时吞噬整个大陆。几百年过去了,可怕的事情终于发生,大陆各处都发生了怪物吞噬民众的怪事,而且部分区域已经发生了大面积的骚乱,叛乱者居然是来自黑暗世界的魔物,为了维护大陆的和平,国王招募了一批优秀的年轻勇士来想黑暗势力进行讨伐…… 3.游戏市场分析 由于目前国内的手机游戏开发才刚刚起步,市面上的游戏类型比较的少,通常是根据现有的PC游戏或是TV游戏来改编的,而且可玩性不高,我们制作此款游戏类型,在手机游戏市场上暂时还是一个空白,同时集中三种游戏类型的游戏模式,在国内算是少见,同时在游戏的可玩性上以及关卡设计上多下工夫,以便增加游戏本身的耐玩性以及为公司带来更多的商业利益。 4.游戏支持平台 支持JA V A手机上运行。 5.游戏技术说明与移植条件 本游戏是采用JA V A编写,所以移植性较强

6.游戏主要情节设计 游戏中总共分成7个场景,每个场景都有自己的风格特色,当完成一个场景的任务后才能进入另一个场景,每两个场景的故事分成一幕,每幕故事还有其对应的隐藏任务,这样就可以大大丰富游戏中的故事情节,从而比较完整的体现游戏中的世界观。游戏中采用大富翁式的骰子回合制进行模式,玩家可以选择个人模式或是电脑模式,选择个人模式进行游戏的时候玩家将会一个人出现在游戏中进行游戏 7.游戏流程图 进入游戏LOGO 游戏结束退出 游戏菜单页面 游戏进行页面角色死亡十次玩家成绩列表进入排行榜 游戏过关 游戏过关页面载入下一关页面游戏通关页面 8.游戏页面描述 9.游戏特效切换

手机游戏的设计与实现—毕业设计(论文)

手机游戏的设计与实现

山东大学毕业设计(论文)成绩评定表学院:专业:年级: 答辩成绩(40%)

目录 摘要 (3) Abstract (4) 第 1 章绪论 (5) 1.1手机游戏 (5) 1.2手机游戏的分类 (5) 1.3技术简介 (7) 1.3.1Android简介 (7) 1.3.2Eclipse/IBM-Eclipse简介 (8) 1.3.3Android SDK简介 (8) 1.3.4SQLite简介 (9) 1.3.5数据库的设计 (10) 第 2 章需求分析 (12) 2.1需求分析 (12) 2.1.1基本功能需求 (12) 2.1.2具体功能需求 (13) 2.1.3运行环境 (13) 2.1.4性能需求 (14) 2.2系统结构化分析 (14) 2.3目标系统要求 (18) 第 3 章总体设计 (19) 3.1系统界面总体设计 (19) 3.2总体流程设计 (20) 3.3游戏程序结构 (20) 3.4后台数据库的总体设计 (21) 第 4 章详细设计 (22) 4.1主菜单详细设置 (22) 4.2游戏关卡详细设置 (23)

4.3闯关过程详细设置 (24) 4.4道具系统详细设置 (26) 4.5剧情详细设置 (28) 4.6系统数据库详细设计实现 (32) 4.6.1概念模型设计 (33) 4.6.2逻辑模型设计 (33) 4.6.3物理模型设计 (34) 4.7数据库链接设置 (35) 第 5 章系统测试 (37) 5.1系统测试模型选择介绍 (37) 5.2系统测试运行结果 (38) 第 6 章结束语 (42) 致谢 (43) 参考文献 (44) 附录一英文原文 (45) 附录二译文 (52)

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

《手机游戏作品开发》课程教学大纲 一、课程基本信息 课程名称:手机游戏作品开发 课程编码: 课程性质:职业岗位限选 总学时: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

关于手机游戏设计的几点思考

龙源期刊网 https://www.doczj.com/doc/9e15552933.html, 关于手机游戏设计的几点思考 作者:田杰灵 来源:《科教导刊·电子版》2015年第34期 摘要随着智能手机的普及和运用,越来越多的国内游戏开发企业把开发重心转移到手机游戏上。手机游戏因其在游戏市场极强的发展态势,当下已经成为游戏开发业的新贵。大量的手机游戏精品涌现的同时,大批糟粕也随之进入市场,并面临着山寨、速成、同质化、低质量等等问题。本文分析了手机游戏目前的现状、阻碍和剖析当下主流手机游戏,经过数据分析,从而得出一些针对手机游戏设计的创意思路。 关键词手机游戏设计思考 中图分类号:TN929. 531 文献标识码:A 由于智能手机的应用普及,手机游戏逐渐成为游戏行业中的黑马,不断有企业开始把开发的重心转移到手机游戏开发上来。近一两年,国内的游戏公司,如腾讯、网易,都逐渐转战手机游戏市场。腾讯推出《天天酷跑》、《节奏大师》、《天天农场》等等,为腾讯带来了巨大的效益。网易也紧随其后,将原本坐镇 PC 平台的原创力作《梦幻西游》移植到手机平台,并在其平台上大力的宣传推广。在这短短的几年时间里,手机游戏开发已经暴露出来不少问题,值得探讨、深思。 1手机游戏成为游戏行业发展趋势的原因 2014年,端游的市场占有率最高,盈利也最多。但是端游要求的精致度很高。与目前国 内市场上最热门的端游,如《魔兽世界》、《LOL》相比,与这些强而有力的端游相比,国内公司难以突出,分一杯羹也就越来越艰难。手机硬件的发展和功能的完备为手机游戏的运行提供了基础。就目前来说,苹果IOS 系统、安卓、微软以及近几年异军突起的台湾联发科MTK 处理器,已经完全可以载动手机游戏。越来越多的游戏引擎开发企业也将自己的主流产品面向手机平台提供支持。例如英佩的虚幻引擎,是目前全世界最知名授权最广的顶尖游戏引擎,占全球商业游戏市场份额的80%。2014 年全新版本的Unity 3d 4.0可以支持MAC OSX、安卓、IOS、Windows 等在内的十个平台。目前国内有名的一些手机游戏,如《炉石传说》、《神庙逃亡》,都是用Unity 3d 来完成的。 从利益上来讲,相比页游、端游,开发手机游戏的投资是小很多的,而且在后期的收益从其运营模式上来看甚至可以超越端游。当下手机游戏的开发成本大约是十年前端游的开发成本。这样一个投入少,回报高的现状,吸引越来越多的人投入这个市场。对于手机游戏的市场开拓,是很有利的。开发手机游戏无疑是另辟蹊径式的投资方式。所以,游戏行业把手机游戏当作了接下来发展的主流趋势。

手机游戏制作开发流程

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

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

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

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

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

手机游戏的设计与开发

毕业设计说明书 手机游戏的设计与开发 学 院: 专 指导教师: 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

手机游戏app开发

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

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

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

超赞:五款发掘设计师灵感的手机游戏

超赞:五款发掘设计师灵感的手机游戏 作者: 一网学最后更新时间:2015-09-21 10:02:52 小编:作为一名专业设计师不仅要做的一手好设计,还要玩的一手好游戏,当遇到瓶颈或者找不到设计灵感的时候,不妨玩一玩好的游戏,轻松娱乐并且能够从好的游戏中发掘设计灵感,相信很多设计师的设计灵感都能够“玩”出来的,今天小编整理了五款经典手机游戏,强烈推荐设计师们玩一下,无论从游戏性还是视觉设计还是艺术性都是出类拔萃的. TOP 1 ——纪念碑谷 Ustwo games开发的一款解谜类手机游戏,于2014年正式发行。游戏通过探索隐藏小路、发现视力错觉以及击败神秘的乌鸦人来帮助沉默公主艾达走出纪念碑迷阵。游戏一共有18关,包括“被遗忘的海岸”和原作,还有一关艾滋病援助版本:艾达的梦。本游戏获得2014年度App Store精选榜单中国区iPad年度最佳游戏。同时,也是GDC2015(全球游戏开发者大会)移动游戏方面,《纪念碑谷》成为了最大赢家,成功拿下“最佳创意”、“最佳移动游戏”和“最佳视觉艺术”三项大奖。这样的游戏如果不玩真的是人生一大遗憾。 这款游戏最棒的地方不只是其游戏性,更加值得把玩的是空间的设计,这种视觉错位空间让你脑洞大开才能通关,并且从配色到建筑物的设计上都表现出非常棒的艺术性。玩过的用户都会有这样的感觉:随便截屏一下,都能当做手机壁纸。

TOP 2 ——收割者:苍白剑客 由英国的传奇游戏工作室Hexage独立开发的一款横版ARPG游戏,风格独特,玩法新奇。之所以说Hexage是个传奇的工作室,那是因为该工作室的工作人员少的离谱从以前的2人到现在的5人,开发的游戏风格奇异,口碑奇佳,在国外知名度很高。该工作室在沉寂了两年之久,终于又推出了这款游戏。 游戏从人设到场景到操作性都可以说非常值得一玩,畅快淋漓并且风格独特,相比较现在大量的3D酷炫技能屌炸天的游戏来说,绝对是一个特异的存在,也让人忍俊不住这种爱。游戏中的小怪物造型也是各有特色,从小道具到服装配色都是顶级的棒。

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

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.doczj.com/doc/9e15552933.html,ng.Object

相关主题
文本预览
相关文档 最新文档