我简单的按键侦听器不工作。它似乎并没有切换pressed布尔值。 (JAVA) [英] My simple key listener isn't working. It doesn't seem to toggle the pressed boolean. (Java)

查看:323
本文介绍了我简单的按键侦听器不工作。它似乎并没有切换pressed布尔值。 (JAVA)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用这一个简单的2.5D游戏,但我的钥匙似乎并没有切换。这不是一个问题,而在主类调用它作为配售的if语句没有执行println语句。由于提前。

 进口java.awt.event.KeyEvent中;
进口java.awt.event.KeyListener;公共类InputHandler实现的KeyListener {    公共InputHandler(Game游戏){
        game.addKeyListener(本);
    }    公共类键{
        私人布尔pressed = FALSE;
        私人诠释numTimes pressed = 0;        公共布尔是pressed(){
            返回pressed;
        }        公众诠释getnumTimes pressed(){
            返回numTimes pressed;
        }        公共无效切换(布尔是pressed){
            pressed =被pressed;
            如果(在pressed()){
                numTimes pressed ++;
            }
        }    }    // *这是你的钥匙去。    公钥起来=新的密钥();
    公钥向下=新的密钥();
    公钥左=新的密钥();
    公钥右=新的密钥();    公共无效键pressed(KeyEvent的E){
        toggleKey(e.getKey code(),TRUE);    }    公共无效调用keyReleased(KeyEvent的E){
        toggleKey(e.getKey code(),FALSE);    }    公共无效的keyTyped(KeyEvent的E){
    }    公共无效toggleKey(INT键code,布尔是pressed){
        如果(键code == KeyEvent.VK_W){
            up.toggle(为pressed);
        }
        如果(键code == KeyEvent.VK_S){
            down.toggle(为pressed);
        }
        如果(键code == KeyEvent.VK_A){
            left.toggle(为pressed);
        }
        如果(键code == KeyEvent.VK_D){
            right.toggle(为pressed);
        }
    }}


解决方案

的KeyListener 的问题是,当组件被注册它只会通知你关键事件到是可聚焦且有焦点。

许多容器默认情况下不聚焦的。

您实际上,最好是使用键绑定

您可以看看<一个href=\"http://stackoverflow.com/questions/15078835/i-am-trying-to-make-ball-gradually-move/15079240#15079240\">I我试图让球逐渐移动一个例子

I'm using this for a simple 2.5D game but my keys don't seem to toggle. It isn't a problem while calling it in the main class as placing println statements in the if statements didn't run. Thanks ahead of time.

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

public class InputHandler implements KeyListener {

    public InputHandler(Game game) {
        game.addKeyListener(this);
    }

    public class Key {
        private boolean pressed = false;
        private int numTimesPressed = 0;

        public boolean isPressed() {
            return pressed;
        }

        public int getnumTimesPressed() {
            return numTimesPressed;
        }

        public void toggle(boolean isPressed) {
            pressed = isPressed;
            if (isPressed()) {
                numTimesPressed++;
            }
        }

    }

    // *This is where your keys go.

    public Key up = new Key();
    public Key down = new Key();
    public Key left = new Key();
    public Key right = new Key();

    public void keyPressed(KeyEvent e) {
        toggleKey(e.getKeyCode(), true);

    }

    public void keyReleased(KeyEvent e) {
        toggleKey(e.getKeyCode(), false);

    }

    public void keyTyped(KeyEvent e) {
    }

    public void toggleKey(int keyCode, boolean isPressed) {
        if (keyCode == KeyEvent.VK_W) {
            up.toggle(isPressed);
        }
        if (keyCode == KeyEvent.VK_S) {
            down.toggle(isPressed);
        }
        if (keyCode == KeyEvent.VK_A) {
            left.toggle(isPressed);
        }
        if (keyCode == KeyEvent.VK_D) {
            right.toggle(isPressed);
        }
    }

}

解决方案

The problem with KeyListener is that it will only notify you of key events when the component it is registered to is focusable and has focus.

Many containers are not focusable by default.

You are actually better of using Key Bindings

You could take a look at I am trying to make ball gradually move for an example

这篇关于我简单的按键侦听器不工作。它似乎并没有切换pressed布尔值。 (JAVA)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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