处理笔的移动
处理 PDA 显示器上笔的移动的事件处理程序有:penDown、penMove 和 penUp。
l 当用户将笔在显示器上移动时,penDown() 方法将被调用,它传递显示器上笔的放置点的 X 和 Y 轴坐标。
public void penDown( int x, int y )
l 当用户在显示器上移动笔时 penMove() 过程将被调用。X 和 Y 轴坐标定义笔的当前位置。
public void penMove( int x, int y )
l 当用户将笔从显示器上移开时 penUp() 过程将被调用,它传递两个参数:笔被移开点的 X 和 Y 轴坐标。
public void penUp( int x, int y )
处理键盘输入,电子束定向发送/接收,以及未知事件
在 J2SE AWT 中,接口 java.awt.event.KeyListener 包含处理不同键盘事件的 keyPressed、keyReleased 和 keyTyped。与此相比,KJava 则只有一个函数,keyDown()。
如果用户在可书画区写下一个字符,按下计算器或菜单图标,或者是按下任何“硬键”(缺省情况下,Date Book、Address、page up、page down、To Do List 或是 Memo Pad key )时,事件 keyDown 就会被调用。参数 keyCode 标识用户输入的键的代码。如果按了其中一个“硬键”,事件 keyDown 就开始匹配这个类中定义过的相应常量中的一个。
public void keyDown( int keyCode )
beamReceive() 方法被用于接收从红外线 Palm 设备传来的数据包。数据以一种字节数组的方式被接收,并用虚拟机自动分配这些数据。
public static boolean beamReceive( byte[] data )
beamSend() 方法不是一个事件处理程序,但是它显然与 beamReceive() 相关联,所以我们在这儿还是要提一下。这种方法被用来给发送到另一个红外线 Palm 设备的数据包定向。在给数据定向时,您可以调用这个函数,但是目标设备必须在接收数据的 spotlet 中注册一个 beamReceive 处理器。
public static boolean beamSend( byte[] data )
unknownEvent 是一个常规的所有未知事件处理例程。
public void unknownEvent( int event, java.io.DataInput in )
定义方法和事件处理程序
此外,main() 定义了应用程序的主要入口。
public static void main(String[] args)
默认的构造程序,Scribble 初始化成员变量,清屏并画出初始框架。
public Scribble()
paint() 方法负责更新或刷新显示。它使用类变量 g -- 一个 Graphics 对象,类似于 Java 2 AWT 中使用的 Graphics 对象。
private void paint()
penDown() 方法执行事件处理程序来处理在屏幕上放置笔的事件。它通过 X 和 Y 坐标来定位。在 Scribble 中,程序测试 Clear 或 Exit 按钮是否被按下,如果按下的话,就处理相应的事件。
public void penDown(int x, int y)
keyDown() 方法处理那些在 Palm 设备的即兴书画框内随手写下的东西。传送到这个方法中的整型值 keyCode 就是输入的字符键值。在 Scribble 应用程序中,我们存储了成员变量 lastKey 中被按下的键,然后调用 paint() 方法刷新屏幕。
public void keyDown(int keyCode)
penMove() 方法处理在屏幕上拖动笔的事件。在 Scribble 中,它负责用笔绘画。
public void penMove(int x, int y)
使用的最后一个方法 clearDrawingArea(),在用户按下 Clear 按钮时由 penDown 事件处理程序调用。由于它仅在 Scribble 类的内部使用,所以 clearDrawingArea() 是一个私有方法。
private void clearDrawingArea()
交互性的游戏离不开用户的输入,对于手机来说主要的输入工具就是键盘了,虽然小,但功能很齐全。
1、按键代码
当用户按下某个键时,程序就会接受到按键事件。每一个按键都被分配一个键码(keyCode)。如KEY_NUM0的值为48,而他的按键名称为0,KEY_NUM9的值为57,按键名称为9,中间的2~8,按循序分布。
2、按键事件
总的来说,处理按键事件的有下面3种方法:
protectedvoidkeyPressed(intkeyCode),当按键按下时触发。
protectedvoidkeyReleased(intkeyCode),当键盘释放时触发。
protectedvoidkeyRepeated(intkeyCode),当键盘重复石调用
下面是MIDP1.0中常见的方法,直接在代码中添加下面语句即可:
publicvoidkeyPressed(intkeyCode)
{
swith(keyCode)
{
case48
//添加自己的动作
break;
case48
//添加自己的动作
break;
case48
//添加自己的动作
break;
default:
//添加自己的动作
break;
}
}
当然我们还可以使用getKeyName(keyCode);得到按键的名字。
3、游戏中的动作
对于游戏来说,我们不可能要求每种手机的按键功能都一样,为了提高应用程序的可移植性,我们常使用游戏动作来替代键码。如:游戏动作UP,DOWN,LEFT,RIGHT,FIRE等。
不管手机中实际使用那五个键表示这四个动作,我们都可以使用getGameAction()方法将键码转换为游戏动作。
按么我们的代码就变成了下面的形式:
//处理按键信息
publicvoidkeyPressed(intkeyCode)
{
intkeystates=getGameAction(keyCode);
switch(keystates)
{
caseUP:
y=Math.max(0,y-2);
break;
caseDOWN:
y=Math.min(getHeight(),y+2);
break;
caseLEFT:
x=Math.max(0,x-2);
break;
caseRIGHT:
x=Math.min(getWidth(),x+2);
break;
}
}
下面我们实际的写了一个例子,我们可以在其中使用游戏键来控制屏幕上小方块的移动:
例子程序:
/**
*文件名:Ocanvas.java
*画布类
*/
importjavax.microedition.lcdui.*;
importjava.io.*;
importjava.util.*;
importjava.lang.Thread;
publicclassOCanvasextendsCanvasimplementsRunnable
{
//定义变量
privateDisplaydisplay;
privatebooleansleeping;
privatelongframeDelay;
privateintXSpeed,YSpeed;
privateintx,y;
publicOCanvas(Displayd)
{
//类构造函数,初始化类变量
super();
display=d;
//设置帧频(30fps)
frameDelay=33;
}
voidstart()
{
//设置这个画布为当前屏幕
display.setCurrent(this);
//初始化一些游戏中的变量,载入相关图片
x=getWidth()/2-10;
y=getHeight()/2-10;
XSpeed=YSpeed=3;
//开始动画线程
sleeping=false;
Threadt=newThread(this);
t.start();
}
publicvoidstop(){
//停止动画线程
sleeping=true;
}
publicvoidrun(){
//动画线程开始后运行
//主游戏循环
while(!sleeping){
//更新屏幕显示
repaint();
//线程休眠
try{
Thread.sleep(frameDelay);
}
catch(InterruptedExceptionie){}
}
}
//这里添加对屏幕的绘制
publicvoidpaint(Graphicsg)
{
//清除屏幕
g.setColor(0xffffffff);
g.fillRect(0,0,getWidth(),getHeight());
//重绘屏幕
g.setColor(0,0,0);
g.fillRect(x,y,20,20);
}
//处理按键信息
publicvoidkeyPressed(intkeyCode)
{
intkeystates=getGameAction(keyCode);
switch(keystates)
{
caseUP:
y=Math.max(0,y-2);
break;
caseDOWN:
y=Math.min(getHeight(),y+2);
break;
caseLEFT:
x=Math.max(0,x-2);
break;
caseRIGHT:
x=Math.min(getWidth(),x+2);
break;
}
}
}
分享到:
相关推荐
J2ME_移动通信介绍J2ME_移动通信介绍J2ME_移动通信介绍J2ME_移动通信介绍J2ME_移动通信介绍J2ME_移动通信介绍
数值运算,字符串处理,时间管理(J2ME移动开发实战教学系列视频)【】11.随机数,集合和定时器(J2ME移动开发实战教学系列视频)【】12.画布开发1Canvas绘图(J2ME移动开发实战教学系列视频)【】13.画布开发 资源太大...
j2ME初学Demo j2ME demo j2me demo j2ME实例
j2me移动开发实战教学视频源代码.rar j2me移动开发实战教学视频源代码.rar j2me移动开发实战教学视频源代码.rar j2me移动开发实战教学视频源代码.rar j2me移动开发实战教学视频源代码.rar
基于J2ME_J2EE的移动公交车查询系统的设计与实现
J2ME三种低级用户界面事件处理技术比较
【摘 要】借助广泛使用...该系统基于J2ME和Web services技术,其中J2ME用于手机端客户程序的开发,而Web Services技术则用于处理服务器端和客户端之间的交互,能够配置在移动通信设备上,满足了随时随地的移动学习需要。
目前有许多不同种类的技术能够实现移动支付,其中J2ME凭借其多种显著的优势成为了佼佼者。移动支付系统也有多种体系架构,其中以第三方支付平台为中心的架构比较灵活、具有很强的可扩展性。本文讨论一个基于J2ME的以...
计费,移动支付,客户端实现,J2ME计费,移动支付,客户端实现,J2ME
Java移动通信程序设计-J2ME,一个很好的用来学习手机通信的例子,有网页源码和程序源码
J2ME 用Game包的Sprite精灵类实现上下左右四个方向的人物移动
J2ME移动开发实战精解教学J2ME移动开发实战精解教学
基于J2ME的企业级移动应用设计电子书 企业级移动应用开发的例程
J2ME开发 J2ME开发 J2ME开发 J2ME开发
它阐释了J2ME的基本体系结构和功能,总结了J2ME与J2SE和J2EE的差异,深入探讨了构建J2ME数据库所需的关键内容,例如,命令、项、事件处理、低层和高层显示接口;介绍了移动开发的高级技术,包括安全、Web服务、住处...
基于J2ME的移动支付系统终端应用的实现
J2ME移动软件程序设计J2ME移动软件程序设计J2ME移动软件程序设计
郭克华J2ME移动开发实战教学视频源代码
J2ME移动开发视频讲义2入门教程也是郭克华J2ME 移动开发实战教学视频讲义
该资源集成了 常用的一些动态特效,如 摇钱树,重力感应,播放mp3 的以及图片的一些处理等...