有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java试图编辑/更新布尔值,但某些内容不起作用

首先,我会发布我的代码——在底部有更多的解释

这是第一节课

package main;
import main.Screen;
import main.Keyboard;

public class Player extends Mob {

    private Keyboard input = new Keyboard();

    private int color = 0x0066CC;
    private int xPos = 50;
    private int yPos = 50;
    private int xSize = 10;
    private int ySize = 10;

    public Player() {

    }

    public void render(Screen screen) {
        screen.addSquare(xPos, yPos, xSize, ySize, color);
        return;
    }

    public void update() {
        this.input.update();
        if (input.up == true) { 
            xPos = xPos + 1;
        }
        System.out.println("xPos is " + xPos);
    }   
}

这是第二节课Keyboard

package main;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Keyboard implements KeyListener {

    private boolean[] keys = new boolean[120];

    public boolean up, down, left, right;

    public  void update() {
        System.out.println("Reached 3");
        up = keys[KeyEvent.VK_UP] || keys[KeyEvent.VK_W];
        down = keys[KeyEvent.VK_DOWN] || keys[KeyEvent.VK_S];
        left = keys[KeyEvent.VK_LEFT] || keys[KeyEvent.VK_A];
        right = keys[KeyEvent.VK_RIGHT] || keys[KeyEvent.VK_D];

        System.out.println("up " + up + ", down " + down + ", left " + left + ", right " + right);
    }

    public void keyPressed(KeyEvent e) {
        keys[e.getKeyCode()] = true;
    }

    public void keyReleased(KeyEvent e) {
        keys[e.getKeyCode()] = false;
    }

    public void keyTyped(KeyEvent e) {

    }
}

好了。问题在于键盘类——无论我做什么,它都无法根据键更新布尔值

(计算机会尽可能频繁地调用Player.update()方法,更新后不会出现错误。)

我很乐意澄清任何需要澄清的事情

谢谢


共 (1) 个答案

  1. # 1 楼答案

    没有更改boolean值,因为KeyListener未在Player类中注册

    如果你看一下KeyEvent API,你会发现以下关于关键事件的解释:

    This low-level event is generated by a component object (such as a text field) when a key is pressed, released, or typed. The event is passed to every KeyListener or KeyAdapter object which registered to receive such events using the component's addKeyListener method. (KeyAdapter objects implement the KeyListener interface.) Each such listener object gets this KeyEvent when the event occurs.

    基本上,它说明为了让这些关键事件发生,您确实需要使用KeyListener orKeyAdapter`注册它们

    在本link中,您将发现这些事件的良好用法