KeyListener 事件显然没有在 Java 小程序中触发 [英] KeyListener events apparently not firing in java applet

查看:22
本文介绍了KeyListener 事件显然没有在 Java 小程序中触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚开始学习编程小程序和一般的 Java GUI,我正在尝试制作一个简单的游戏.目前,我有主类 (Game) 和玩家类 (Player) 我有玩家在屏幕上绘制,但我正在努力使关键事件起作用,任何帮助表示感谢!

I've just started learning to program applets, and java GUI in general, I'm attempting to make a simple game. At the moment, i have the main class (Game) and the player class (Player) i have the player drawing to the screen, but i'm struggling to get the key events to work, any help appreciated!

播放器图像显示得非常好,但是当我按下一个键时位置根本没有改变.

The player image displays perfectly fine, but the position doesn't change when i hit a key at all.

为播放器发布错误代码,已更新

wrong code posted for the player, updated

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:

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;
    }
}

推荐答案

面板可能没有焦点,或者不可聚焦.

The panel probably either does not have focus, or is not focusable.

试试这个代码.我将键更改为向左/向右/向上/向下箭头.为简单起见,我将其保留为基于 AWT 的小程序.

Try this code. I changed the keys to the left/right/up/down arrows. For simplicity, I left it as an AWT based 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);
    }

}

这篇关于KeyListener 事件显然没有在 Java 小程序中触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆