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());
这样就不会出现图片的“覆盖”问题了。