keyPressed函数怎样被调用的?该怎么解决
发布时间:2010-06-05 12:41:15 文章来源:www.iduyao.cn 采编人员:星星草
keyPressed函数怎样被调用的?
public class anji extends GameCanvas implements Runnable {
public Image img;
public Sprite sp1;
private Graphics gra;
public anji() {
super(true);
}
public void paint(Graphics g) {
gra=g;
try{
gra=this.getGraphics();
img=Image.createImage("/car.png");
sp1= new Sprite(img);
gra=this.getGraphics();
}catch(Exception ex){}
sp1.setPosition(this.getWidth()/2, this.getHeight()/2);
sp1.paint(gra);//自带paint函数。后面会从写
new Thread(this).start();
}
public void run() {
while(true){
try{
draw();
Thread .currentThread();
Thread.sleep(100);
}catch (Exception ex){}
}
}
protected void keyPressed(){
System.out.println("111");
int keyState = this.getKeyStates();
if((keyState & LEFT_PRESSED)!=0){
sp1.move(-5, 0);
}
repaint();
}
private void draw(){
gra.setColor(255,255,255);
gra.fillRect(0, 0, this.getWidth(), this.getHeight());
sp1.paint(gra);
this.flushGraphics();
}
}
}
为什么按键后没反应,也不打印,初学者,哪位高手指点一下,小弟不胜感激!!!!
------解决方案--------------------
程序的canvas是继承GameCanvas, midp2.0,在2.0中通常的做法是将游戏(应用)的输入方法放在线程中。在2.0中也可以使用keyPressed(),但1.0与2.0实现的按键响应原理不同,你的这个keyPressed方法写得不伦不类,何况keyPressed没有形参。最简便的就是把keyPressed加入线程,不过要改改方法名。还有在paint中不要gra=this.getGraphics(),gra=this.getGraphics()写在构造函数中
------解决方案--------------------
要继承Canvas,那个keyPerssed(int key)实际上是覆盖了Canvas中的keyPerssed(int key)方法,想得到按键响应,在此方法里面输出就可以了。
protected void keyPerssed(int key){
System.out.println(key);//输出键值
switch(key){
case -6://可以按左软键得到,可能不是-6,根据输出的值为准
//处理逻辑
break;
。。。。。。
}
}
而且,想要重新绘制用repaint()就可以了,它实际上是重新执行paint(Graphics g)方法,所以不用再写个绘制方法,也没必要再加个Graphics 的属性。如果发现没有刷屏,也可以加上刷屏的代码
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
这样就不会出现图片的“覆盖”问题了。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
myeclipse上开发j2me的错误提示怎么看(找个好多没有解决的,CSDN能人出来啊......)
对于javame的提示实在无语啊。如下
java.lang.I...
-
命令行执行java程序,含有多个包
我定义了一个java project 叫project1,
然后建立了两个package,(注意都不是jar包)
一个叫animaltestdr...
-
j2me新手问题
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
public class gamestart extends...
-
j2me中如何用代码判断两次pointerPressed之间的时间差?
j2me中如何用代码判断两次pointerPressed之间的时间差?
------解决方案---...
-
通过电脑上wap浏览器可以进入我的wap网站,但是手机不能上,为什么?
我做了wap网站,通过花生壳挂接到外网上了。
通过电脑上wap浏览器可...
-
不含声音文件,如何播放声音?塞班
今天看了一下“飞信JAVA 1.0版”,安装后,信息提示音跟电子音似的。
解压后,发现只有一堆class文件,和...
-
怎么看wtk的源码?高分求助!
我们平时使用eclipse时,点右键选open declaration,或者按F3即可查看源码。现在我建了一个J2ME Midlet工程...
-
如何使用外部js验证下拉列表是否选择
我想使用js对表单进行验证,其中有一个下拉列表,如何验证这个下拉列表在提交的时候已经做过选...
-
关于GUI的一个问题(分不多了,请谅解)
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MyMouseAdap...
-
j2me socket读取服务器中文出乱码
conn = (SocketConnection) Connector.open(addr ,Connector.READ_WRITE);
conn.setSocketOpti...