首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeyListener不工作

KeyListener不工作
EN

Stack Overflow用户
提问于 2014-03-01 03:09:37
回答 1查看 258关注 0票数 1

我正在开发一个游戏,很久以前我用java编程,所以我忘记了一些东西,比如如何装KeyListener,所以我读了java文档,想出了这个,但是当我按下其中一个键的时候,玩家不会移动。

下面是我的代码。

这是在Player.java类中(Player.java扩展了Entity.java):

(速度= 1)

代码语言:javascript
复制
public void keyPressed(KeyEvent e){
        if(e.getKeyChar() == 'W' | e.getKeyChar() == 'w' | e.getKeyCode() == KeyEvent.VK_UP){
            yPos = -speed;
        }
        if(e.getKeyChar() == 'S' | e.getKeyChar() == 's' | e.getKeyCode() == KeyEvent.VK_DOWN){
            yPos = speed;
        }
        if(e.getKeyChar() == 'A' | e.getKeyChar() == 'a' | e.getKeyCode() == KeyEvent.VK_LEFT){
            xPos = -speed;
        }
        if(e.getKeyChar() == 'D' | e.getKeyChar() == 'd' | e.getKeyCode() == KeyEvent.VK_RIGHT){
            xPos = speed;
        }
    }

    public void keyReleased(KeyEvent e){
        if(e.getKeyChar() == 'W' | e.getKeyChar() == 'w' | e.getKeyCode() == KeyEvent.VK_UP){
            yPos = 0;
        }
        if(e.getKeyChar() == 'S' | e.getKeyChar() == 's' | e.getKeyCode() == KeyEvent.VK_DOWN){
            yPos = 0;
        }
        if(e.getKeyChar() == 'A' | e.getKeyChar() == 'a' | e.getKeyCode() == KeyEvent.VK_RIGHT){
            xPos = 0;
        }
        if(e.getKeyChar() == 'D' | e.getKeyChar() == 'd' | e.getKeyCode() == KeyEvent.VK_LEFT){
            xPos = 0;
        }
    }

这是在Entity.java类中:

代码语言:javascript
复制
public void move(){
        x += xPos;
        y += yPos;
    }

这是在Entities.java类中:

代码语言:javascript
复制
KeyAdapter playerAdapter = new KeyAdapter(){
        @Override
        public void keyPressed(KeyEvent e){
            player.keyPressed(e);
        }
        @Override
        public void keyReleased(KeyEvent e){
            player.keyReleased(e);
        }
    };

    public void move(){
        //Player
        player.move();
    }

这是在Level.java类中(Level.java扩展了JComponent):

在Level()方法中:addKeyListener(entities.playerAdapter);

在paintComponent(图形g)方法中:

代码语言:javascript
复制
if(entities.player.getState())
 g2d.drawImage(entities.player.getImage(), entities.player.getX(), entities.player.getY(), this);

和int run()方法:entities.move();

那么,我做错了什么呢?

EN

回答 1

Stack Overflow用户

发布于 2014-03-01 03:47:11

请注意docs for getKeyChar()中的以下内容

KEY_PRESSED和KEY_RELEASED事件不用于报告字符输入。因此,此方法返回的值保证只对KEY_TYPED事件有意义。

出于您的目的,the official tutorial建议使用key bindings:

若要定义对特定键的特殊反应,请使用键绑定而不是键侦听器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22103812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档