博文
[转] MIDP1.0小游戏入门-五子棋1.0(2006-08-07 10:03:00)
摘要:http://www.yuerjv.com/Program/techqrt/JAVA/200602/310.html......
[转]第5章 MIDP的持久化解决方案—RMS (2006-08-07 09:31:00)
摘要:5.1 初识RMS(Record Management System)
记得曾经有人说,数据库程序员是世界上最不愁找不到工作的职业了。虽然此话无从考究J,不过也从一个方面说明了不论开发什么类型的应用,数据库几乎是一个永恒的话题!在java的体系结构里,我们现在已经有了JDBC这个技术,还有许多就此衍生的概念,许多耳熟能详的术语,EJB, JDO等等,只是,这些都是针对桌面平台或者企业用户的,对于处理能力和存储空间都十分有限的无线设备而言,必须有一种特殊的机制与之适应,MIDP2.0规范里不支持全面的树型文件系统,但为我们提供了这样一种数据持久化机制——记录管理系统(Record Management System RMS)。
记录管理系统就是一个小型的数据库管理系统,它以一种简单的,类似表格的形式组织信息,并存储起来形成持久化存储,以供应用程序在重新启动后继续使用。
RMS提供了Records(记录)和Records Stores(记录仓储)两个概念。
记录仓储(Records Stores)类似于一般关系数据库系统中的表格(TABLE),它代表了一组记录的集合。在相同MIDlet Suite中,每个仓储都拥有自己独一无二的名字,大小不能超过32个Unicode字符,同一个Suite下的MIDlet都可以共享这些记录仓储。
记录是记录仓储的组成元素。记录仓储中含有很多条记录,就如同记录表格是由一行行组成的一样。每条记录代表了一条数据信息。一条记录(Record)由一个整型的RecordID与一个代表数据的byte[]数组两个子元素组成。RecordID是每条记录的唯一标志符,利用这个标志符可以用于从记录仓储中找到对应的一条记录。请注意,由于产生记录号RecordID使用的是一种简单的单增算法。当一条数据记录被分配的时候,它的记录号也就唯一分配了。并且该条记录被删除后,RecordID也不会被使用。所以,仓储中相邻的记录并不一定会有连续的RecordID。
MIDP Suite所使用的RMS空间图可由下图所示:
每一个MIDlet Suite都会有属于自己的一个用于RMS的私有空间。可以通过jad描述文件事先规定Mid......
[转]6 GAME API 3(2006-08-07 09:30:00)
摘要: /**
* 画布重画事件,替代Canvas中的paint()事件, 根据不同的游戏状态(gameState)画出游戏画面
* 本方法由thread每次重新启动, 最后执行flushGraphics()重画缓冲区
*/
public synchronized void paintCanvas(Graphics g){
if(gameState == GAME_INIT){
//游戏第一次启动
//设置为全屏模式并清屏
this.setFullScreenMode(true);
g.setColor(255, 255, 255);
g.fillRect(0, 0, mainWidth, mainHeight);
if(!COMMAND_ADD_FLAG){
......
[转]6 GAME API 2(2006-08-07 09:30:00)
摘要:/*
* Author: Huang ye(www.hyweb.net)
* 代码开源, 引用请注明出处
*
* 创建日期 2005-2-24
*/
package net.hyweb;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.game.LayerManager;
import java.util.*;
/**
* @author Huang ye
*/
public class SubCanvas extends GameCanvas implements Runnable, CommandListener {
/**
*
* @uml.property name="subMIDlet"
* @uml.associationEnd multiplicity="(0 1)"
*/
private Controller controller;
private Graphics graphics;
private Thread thread;
private boolean threadAlive = false;
......
[转]6 GAME API 1(2006-08-07 09:27:00)
摘要:6.1 游戏API简介
MIDP 2.0相对于1.0来说,最大的变化就是新添加了用于支持游戏的API,它们被放在javax.microedition.lcdui.game包中。游戏API包提供了一系列针对无线设备的游戏开发类。由于无线设备仅有有限的计算能力,因此许多API的目的在于提高Java游戏的性能,并且把原来很多需要手动编写的代码如屏幕双缓冲、图像剪裁等都交给API间接调用本地代码来实现。各厂家有相当大的自由来优化它们。
游戏API使用了MIDP的低级图形类接口(Graphics,Image,等等)。整个game包仅有5个Class:
GameCanvas
这个类是LCDUI的Canvas类的子类,为游戏提供了基本的“屏幕”功能。除了从Canvas继承下来的方法外,这个类还提供了游戏专用的功能,如查询当前游戏键状态的能力,同步图像输出;这些功能简化了游戏开发并提高了性能。
Layer
Layer类代表游戏中的一个可视化元素,例如Sprite或TiledLayer是它的子类;这个抽象类搭好了层(Layer)的基本框架并提供了一些基本的属性,如位置,大小,可视与否。出于优化的考虑,不允许直接产生Layer的子类(不能包外继承)。
LayerManager
对于有着许多Layer的游戏而言,LayerManager通过实现分层次的自动渲染,从而简化了游戏开发。它允许开发者设置一个可视窗口(View Window),表示用户在游戏中可见的窗口; LayerManager自动渲染游戏中的Layer,从而实现期望的视图效果。
Sprite
Sprite又称“精灵”,也是一种Layer,可以显示一帧或多帧的连续图像。但所有的帧都是相同大小的,并且由一个Image对象提供。Sprite通过循环显示每一帧,可以实现任意顺序的动画;Sprite类还提供了许多变换(翻转和旋转)模式和碰撞检测方法,能大大简化游戏逻辑的实现。
TiledLayer
TiledLayer又称“砖块”,这个类允许开发者在不必使用非常大的Image对象的情况下创建一个大的图像内容。TiledLayer有许多单元格构成,每个单元格能显示由一个单一Image......
[转] j2me程序的开发流程(2006-08-07 09:23:00)
摘要:10.1 j2me程序的开发流程
在本章之前所介绍的都是怎么样编写J2ME的源文件(即*.java文件)。因为j2me不同于j2se程序的开发流程,在编写好java源文件后,我们还要继续进行如下工作:
l 编译
l 混淆(可选)
l 预审核
l 打包
打包后,将获得了一个jar文件。接下来为jar文件编写一个以jad为后缀的描述文件。最后通过各种途径将jar文件、jad描述文件传输到移动设备上运行即可。
10.1.1 开发流程详解
完整的MIDP手机程序开发流程如下表(其中混淆为可选):
流程
工具
输入
输出
编译
javac.exe编译
源文件(*.java)
未混淆的类文件(*.class)
混淆
第三方提供的工具
未混淆的类文件(*.class)
混淆后的类文件(*.class)
预审
preverify.exe预审核
混淆后的类文件(*.class)
经过预先审核的类文件(*.class)
包
jar.exe打包
经过预先审核的类文件(*.class)
包文件(*.jar)
编写描述文件
文本编辑工具
描述文件(*.jad)
安装运行
传输工具
(IR/BT/数据线/OTA)
包文件(*.jar)和
描述文件(*.jad)
在仿真器或手机上正式运行
下面将会介绍每个步骤。当利用集成开发环境(诸如JBuilder、NetBeans、Sun ONE Studio、Eclipse等)时,这些工具不仅可以很快的帮我们建立起代码的主干,而且可以帮助......
Alert用法(2006-08-06 09:59:00)
摘要:import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
//made by sword2008@ alert使用
public class AlertDemo extends MIDlet
{
//private
private Command showcmd=new Command("SHOW",Command.SCREEN,1);
private Command exitcmd=new Command("EXIT",Command.EXIT,1);
private String[] typeStrings={"alarm","confirmation","error","info","warning"};
private String[] timeoutStrings={"2秒","4秒","8秒","永远"};
private int SECOND=1000;
private Display display;
private boolean firstTime;
private Form mainForm;
public AlertDemo(){
firstTime=true;
mainForm=new Form("警报设置");}
public void startApp(){
display=Display.getDisplay(this);
showOption();}
private void showOption(){
if(firstTime){
ChoiceGroup types=new ChoiceGroup("Type",ChoiceGroup.POPUP,typeStrings,null);
ChoiceGroup timeouts=new ChoiceGroup("Timeout",ChoiceGroup.POPUP,timeoutSt......
TextBox例子(2006-08-05 20:11:00)
摘要:import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
//TextBox事例,made by sword2008
public class TextBoxDemo extends MIDlet implements CommandListener
{
//private
private Display display;
private ChoiceGroup types;
private ChoiceGroup options;
private Form mainform;
private Command exitcmd=new Command("EXIT",Command.EXIT,1);
private Command backcmd=new Command("BACK",Command.BACK,1);
private Command screencmd=new Command("SCREEN",Command.SCREEN,1);
private boolean firstTime;
//label
String textlabels[]={"字","邮箱","NUMBRIC","DECIMAL","电话","网址",};
int textBoxType[]={TextField.ANY,TextField.EMAILADDR,TextField.NUMERIC,
TextField.DECIMAL,TextField.PHONENUMBER,TextField.URL};
public TextBoxDemo(){
display=Display.getDisplay(this);
firstTime=true;
}
......
List与图象载入(2006-08-05 09:55:00)
摘要:import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class PhotoMIDlet extends MIDlet implements CommandListener
{
String list1[]={"王","道","仁"};
private Command okCommand=new Command("确定",Command.OK,1);
private Command backCommand=new Command("返回",Command.BACK,1);
private Command exitCommand=new Command("退出",Command.EXIT,1);
private List list2=new List("Photo",List.EXCLUSIVE,list1,null);
private Display display=null;
private Form form=new Form("Photo");
private Image img=null;
public PhotoMIDlet(){
list2.addCommand(okCommand);
list2.addCommand(exitCommand);
list2.setCommandListener(this);
form.addCommand(okCommand);
form.addCommand(exitCommand);
form.setCommandListener(this);
}
public void startApp(){
......
[转]第4章 MIDP低级UI的使用2(2006-08-05 08:59:00)
摘要:下面给出一段代码,让大家体会一下如何在实际开发过程当中妥善处理屏幕事件:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class test4 extends Canvas
implements CommandListener
{
public test4()
{
setTitle("全屏幕测试") ;
setTicker(new Ticker("Ticker ")) ;
addCommand(new Command("全屏幕",Command.SCREEN,1)) ;
addCommand(new Command("正常",Command.SCREEN,1)) ;
setCommandListener(this) ;
}
 ......