[英]How to move image in Applet using KeyListener?
我正在嘗試制作一個顯示兩個圖像的小程序,並允許用戶使用向左/向右箭頭鍵(或鍵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;
}
}
}
代碼的一個問題是,您永遠不會初始化數組的private boolean[] keys
,但是由於您只是試圖更改圖像的x位置,因此使用布爾數組非常不切實際。 相反,只要按下一個鍵就更新x值。
您的keyPressed
函數如下所示:
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();
}
在此方法的最后一行中,您調用repaint,以便小程序實際重繪圖像。
然后,您可以將keyReleased
方法保留為空,因為您無需重置任何值。 最后,刪除update
方法,因為它永遠不會被調用(由於在超類或接口中指定了它們,因此會調用代碼中的其他方法)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.