【问题标题】:How do I call Graphics Method inside KeyListener?如何在 KeyListener 中调用图形方法?
【发布时间】:2017-10-21 08:59:57
【问题描述】:

提前,我想说有很多类似的帖子,但是,它们都不适用于我,或者它们实际上都没有任何答案,并且已经过时了,这意味着可能会有新的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));
            }
        }

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

【问题讨论】:

    标签: java graphics awt keylistener


    【解决方案1】:

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

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

    【讨论】:

    • 我知道,但是如何访问g2d 变量?感谢您的帮助,但这无助于解决我在方法中获取变量的问题,除非我使用“错误”的方式
    • 所有(根据我的经验)图形对象都可以转换为 Graphics2D
    • 你的意思是(Graphics2D) g 其中gGraphics 变量吗?
    • 是的,我就是这个意思
    • 实际上我之前在我的代码中使用过它,但是当我已经有一个 Graphics2D 变量时,这有什么帮助
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 2015-08-31
      • 2015-07-16
      • 2014-03-16
      • 1970-01-01
      • 2015-01-05
      • 2015-07-12
      相关资源
      最近更新 更多