我正在尝试创建一个显示两个图像的Applet,并允许用户使用左/右箭头键(或键a和d)移动其中一个图像。从好的方面来说,我知道我正确导入了图像,因为一旦我运行程序就会显示它们;但是,一旦我按下左或右键,会立即弹出错误,图像不会像我预期的那样移动。如果有人能告诉我什么是错的,并解释我需要修复的细节,这将是一个很大的帮助。提前谢谢。
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class mainClass extends Applet implements KeyListener {
Image pic1, pic2;
int x=0, y=0,move=5;
public void init(){
setSize (1600,1200);
pic1 = getImage(getDocumentBase(),"beach king.jpg");
pic2 = getImage(getDocumentBase(),"eye.jpg");
addKeyListener(this);
}
public void start(){
}
public void paint(Graphics g){
//setBackground(Color.CYAN);
try{Thread.sleep(100);}
catch(Exception e){}
//going to change position of pic1
g.drawImage(pic1, x, y, this);
g.drawImage(pic2, 0, 0, this);
}
private boolean[] keys;
public void keyPressed(KeyEvent e) {
keys[e.getKeyCode()] = true;
}
public void keyReleased(KeyEvent e) {
keys[e.getKeyCode()] = false;
}
public void keyTyped(KeyEvent e) {}
public void update() {
if(keys[KeyEvent.VK_A] || keys[KeyEvent.VK_LEFT]){
x-=move;
}
if(keys[KeyEvent.VK_D] || keys[KeyEvent.VK_RIGHT]){
x+=move;
}
}
}
答案 0 :(得分:0)
您的代码的一个问题是您永远不会初始化数组keyPressed
,但由于您只是尝试更改图像的x位置,因此使用布尔数组是非常不切实际的。相反,只需按下键即可更新x值。
您的public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_A || e.getKeyCode() == KeyEvent.VK_LEFT) {
x-=move;
}
else if (e.getKeyCode() == KeyEvent.VK_D || e.getKeyCode() == KeyEvent.VK_RIGHT) {
x+=move;
}
this.repaint();
}
函数如下所示:
keyReleased
在此方法的最后一行中,您调用repaint,以便applet实际重绘图像。
然后,您可以将update
方法留空,因为您不需要重置任何值。最后,删除你的sqlite3
方法,因为它永远不会被调用(代码中的其他方法被调用,因为它们是在超类或接口中指定的。)