如何在KeyListener中调用Graphics Method?

时间:2017-05-21 18:28:59

标签: java graphics awt keylistener

提前,我想说有很多类似的帖子,但是,它们都没有适用于我,或者根本没有任何答案,并且已经过时了,这意味着可能有新的java可以帮助我解决问题的功能。

无论如何,我想制作一个有网球拍的游戏。当然,他们必须轮换。为了旋转,我必须在我的KeyListener中调用我的Graphics2D方法。如果不在我的密钥监听器方法中添加新的Graphics2D变量,我该如何做呢?

以下是我所有涉及实现此目标的方法:

        public void draw(Graphics2D g2d) {
            g2d.drawImage(getPaddleImg(), x, y, null);
        }

        public static Image getPaddleImg() {
            ImageIcon ic = new ImageIcon("C:/Users/Elliot/Desktop/Eclipse Game Tennis/paddle.png");
            return ic.getImage();
        }

        public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();

            if(key==KeyEvent.VK_W){
                g2d.rotate(Math.toRadians(5));
            } else if(key==KeyEvent.VK_W) {
                g2d.rotate(Math.toRadians(-5));
            }

        public void keyReleased(KeyEvent e) {
            int key = e.getKeyCode();

            if(key==KeyEvent.VK_W){
                g2d.rotate(Math.toRadians(0));
            } else if(key==KeyEvent.VK_W) {
                g2d.rotate(Math.toRadians(0));
            }
        }

我知道,由于g2dKeyPressed()方法中的KeyReleased(),此代码会给我一个错误。我如何在这两种方法中调用g2d?或者我如何在draw()方法中做同样的事情?

2 个答案:

答案 0 :(得分:2)

错误的方法:您可以使用Component.getGraphics()来获取图形对象。

正确的方法:所有绘画都应该在paint(Component)方法内完成。这是因为用户可以随时调整窗口大小/打开/关闭窗口。在KeyListener(也是研究键绑定)中,您应该更新有关如何绘制播放器/球拍的设置,然后调用repaint()

答案 1 :(得分:0)

OK!我实际上是自己想出来的!我所做的是在g2d.rotate(.....)方法中称为draw()。我所做的是创建检查旋转的变量,并在我的KeyPressed()方法中将它们设置为true或false。这是我在draw()方法中使用的代码:

 if(isRotatingPositive == true) {
    g2d.rotate(Math.toRadians(speed));
 } else if(isRotatingNegative == true) {
    g2d.rotate(Math.toRadians(-speed));
 }