处理笔的移动
处理 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;
}
}
}
分享到:
相关推荐
4. **事件处理与键盘映射** J2ME的事件模型基于MIDP(Mobile Information Device Profile),开发者需要监听键盘事件,根据用户按键的组合来确定拼音或笔画,然后调用输入法引擎进行转换。 5. **屏幕显示优化** ...
在Java 2 Micro Edition (J2ME)平台上开发游戏...通过组合不同的移动方法和键盘事件处理,可以构建出更复杂的游戏逻辑。在实际开发中,还需要考虑边界检测、碰撞检测以及精灵的动画播放等问题,以提供更好的用户体验。
总的来说,"J2ME 画布实现中文输入"是一项涉及键盘事件处理、字符编码、图形绘制和资源管理等多个方面的技术挑战。通过合理的编程技巧和优化策略,可以在有限的硬件条件下实现高效且功能完善的中文输入系统。在提供...
为了让人物能够响应用户的触摸或按键操作,我们需要监听设备的输入事件。这可能涉及到注册键盘监听器或者处理触摸屏事件,根据用户的输入调整人物的移动方向和速度。 **7. 性能优化** 由于J2ME在资源有限的设备上...
5. **事件处理**:解释如何处理用户输入和系统事件,包括键盘和屏幕触摸事件,以及如何响应这些事件。 6. **游戏开发**:可能包含基于J2ME的游戏编程实例,介绍动画制作、碰撞检测和游戏逻辑的实现。 7. **优化...
总的来说,J2ME低级界面的汉字输入是一个相对复杂的过程,需要对J2ME的事件处理、字库管理和用户界面设计有深入理解。通过掌握这些技术,开发者可以创造出更加本地化且具有高度定制性的移动应用。
Java 2 Micro Edition...通过分析这个文件,可以深入了解J2ME输入法的具体实现细节,如事件处理、字符映射、键盘布局等。这有助于开发者学习如何在J2ME环境中创建自定义的输入解决方案,以适应特定的设备和用户需求。
总之,J2ME游戏开发中的按键控制是一个重要的部分,通过理解并熟练运用Canvas类的按键事件处理方法,开发者可以实现各种复杂的游戏控制逻辑,让游戏在有限的硬件资源下也能提供丰富的用户体验。
事件处理主要是对用户输入的响应,如触摸屏幕或按键操作。J2ME提供了键盘和触摸屏的事件监听机制。开发者可以注册KeyListener或CommandListener来捕捉用户操作,然后更新游戏状态,如改变飞机的飞行方向、发射子弹等...
9. **事件处理**:J2ME使用事件驱动模型,如键盘输入、屏幕触摸等,开发者需要编写监听器来响应这些事件。 10. **生命周期管理**:MIDlets有自己的生命周期,包括启动、暂停、恢复和停止状态,开发者需要理解并正确...
J2ME使用基于事件的模型进行编程,事件监听器和事件处理函数处理用户的输入和其他系统事件。 8. **设备适配与兼容性** 由于J2ME设备的多样性,开发者需要考虑不同设备的屏幕尺寸、键盘布局和硬件特性。WTK...
1. **事件处理**:首先,你需要捕获用户的按键输入。在J2ME中,这通常通过重写`keyPressed()`, `keyReleased()`, 和 `keyRepeated()` 方法完成。你需要记录下用户按下的键值,并根据这些键值组合形成中文字符。 2. ...
总的来说,J2ME编写的俄罗斯方块游戏展现了移动设备上的游戏开发技术,包括图形界面设计、事件处理、游戏逻辑实现以及性能优化等关键环节。通过这样的项目,开发者不仅可以锻炼编程技能,还能深入理解J2ME平台的工作...
7. **事件处理**:J2ME中的事件处理机制包括键盘事件和用户界面组件的点击事件,开发者需要监听并响应这些事件。 8. **无线特性**:J2ME的WMA和WSP(Wireless Session Protocol)可以实现无线消息传递和WAP浏览。 ...
综上所述,J2ME贪吃蛇游戏的开发涉及了移动应用开发的基础,包括游戏逻辑设计、图形绘制、事件处理、碰撞检测等多个方面,对于学习J2ME和游戏编程具有很好的实践价值。通过这个游戏,开发者可以深入理解移动设备上的...
用户可能需要通过键盘输入URL,使用有限的导航选项,如前进、后退和书签。页面渲染能力有限,往往不支持JavaScript、CSS和Flash等高级功能,只能显示基本的HTML内容。 **网络连接** J2ME浏览器使用MIDP的...
为此,开发者需要实现事件监听机制,处理键盘、触摸屏等输入设备的事件。 【标签】“J2ME 图片”相关知识涵盖J2ME环境下的图像操作技术,包括图像的加载、显示、编辑和用户交互等。掌握这些技术对于开发面向J2ME...
8. **事件处理**:J2ME使用Listener模式处理用户输入事件,如键盘和触摸屏事件。源代码可能包括事件注册、监听和响应的实例。 9. **线程管理**:在J2ME中,多线程用于实现并发执行,特别是在处理网络请求和动画时。...
在低级界面上输入数字,意味着开发者需要编写自己的键盘处理逻辑,而不是依赖MIDP提供的高级组件。这涉及到对MIDP API的深入了解,包括`Canvas`类的使用,它是J2ME中绘制和接收用户事件的基本类。开发者需要重写`...
总的来说,J2ME低级API与事件处理是移动应用开发的基础,它们使得开发者能够在各种不同规格的设备上创建功能丰富的、用户友好的应用程序。通过研究和实践这些示例代码,开发者能够提升对J2ME平台的理解,增强在有限...