簡體   English   中英

如何使用KeyListener在Applet中移動圖像?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM