簡體   English   中英

KeyListener事件顯然沒有在java applet中觸發

[英]KeyListener events apparently not firing in java applet

我剛剛開始學習編程applet和java GUI,我試圖制作一個簡單的游戲。 目前,我有主要類(游戲)和玩家類(玩家)我讓玩家畫到屏幕上,但我正在努力讓關鍵事件發揮作用,任何幫助贊賞!

玩家圖像顯示完全正常,但當我完全按下按鍵時位置不會改變。

編輯:為播放器發布錯誤代碼,更新

Game.java:

public class Game extends Applet {

    Player player;

    @Override
    public void init() {
        player = new Player(this);
        this.setSize(800, 600);
        addKeyListener(player);
    }

    @Override
    public void paint(Graphics g) {        
        player.paint(g);
    }



}

Player.java:

public class Player implements KeyListener {

    Game game;
    Image image;
    int x;
    int y;

    public Player(Game game) {
        this.game = game;
        x = 0;
        y = 0;
        image = game.getImage(game.getCodeBase(), "images/Player.png");
    }

    public void paint(Graphics g) {
        g.drawImage(image, x, y, game);
    }

    @Override
    public void keyTyped(KeyEvent e) {
        return;
    }

    @Override
    public void keyPressed(KeyEvent e) {
        switch (e.getKeyCode()) {
            case KeyEvent.VK_A:
                x -= 1;
                break;
            case KeyEvent.VK_D:
                x += 1;
                break;
            case KeyEvent.VK_S:
                y += 1;
                break;
            case KeyEvent.VK_W:
                y -= 1;
                break;
        }
        game.repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {
        return;
    }
}

面板可能要么沒有焦點,要么沒有焦點。


試試這個代碼。 我將鍵更改為左/右/上/下箭頭。 為簡單起見,我把它留作了基於AWT的applet。

// <applet code='Game' width=400 height=100></applet>
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Game extends Applet implements KeyListener {

    Player player;

    @Override
    public void init() {
        player = new Player(getImage(32));
        addKeyListener(this);
        setFocusable(true);
        requestFocusInWindow();
    }

    @Override
    public void paint(Graphics g) {
        player.paint(g);
    }

    public Image getImage(int size) {
        Image img = createImage(size,size);
        Graphics g = img.getGraphics();
        g.setColor(Color.RED);
        g.fillRect(0,0,size,size);

        g.dispose();

        return img;
    }

    @Override
    public void keyTyped(KeyEvent e) {
        return;
    }

    @Override
    public void keyPressed(KeyEvent e) {
        switch (e.getKeyCode()) {
            case KeyEvent.VK_LEFT:
                player.x -= 1;
                break;
            case KeyEvent.VK_RIGHT:
                player.x += 1;
                break;
            case KeyEvent.VK_DOWN:
                player.y += 1;
                break;
            case KeyEvent.VK_UP:
                player.y -= 1;
                break;
        }
        repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {
        return;
    }
}

class Player {

    Image image;
    int x;
    int y;

    public Player(Image image) {
        x = 0;
        y = 0;
        this.image = image;
    }

    public void paint(Graphics g) {
        g.drawImage(image, x, y, null);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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