专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > J2ME

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());
这样就不会出现图片的“覆盖”问题了。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: