Java球移动

标签 java line

我的问题是球一旦移动就会变成一条线。
这是代码:

package Java;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.*;

public class javagame extends JFrame {

    private Image dbImage;
    private Graphics dbg;

    int x, y;

    public class AL extends KeyAdapter {
        public void keyPressed (KeyEvent e) {

            int keyCode = e.getKeyCode();
            if(keyCode == e.VK_LEFT) {
                x-= 5;
            }
            if(keyCode == e.VK_RIGHT) {
                x+= 5;
            }
            if(keyCode == e.VK_UP) {
                y-= 5;
            }
            if(keyCode == e.VK_DOWN) {
                y+= 5;
            }
        }
        public void keyReleased (KeyEvent e) {
        }
    }

    public javagame() {
        addKeyListener(new AL());

        setTitle("Java Game");
        setSize(750, 750);
        setResizable(false);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        x = 250;
        y = 250;
    }

    public void paint(Graphics g) {
        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintCompenent(dbg);
        g.drawImage(dbImage, 0, 0, this);
    }

    public void paintComponent (Graphics g){
        g.drawString("Copy Right All rights reserved to Aaron Collins 2013-2013", 275, 100);
        g.drawLine(270, 105, 415, 105);

        g.fillOval(x, y, 15, 15);

        repaint();
    }

    public static void main(String[] args) {
        new javagame();
    }
}

当我说它变成一条线时,我的意思是球移动但不会移除前一个球。
请帮助我解决问题,以便我可以继续我的游戏!

最佳答案

  1. 您重写paint,但从不调用super.paint,这意味着该组件永远不会为新的绘制周期准备图形上下文,这意味着您之前绘制的内容仍然存在
  2. 您的 paintComponent 方法永远不会被调用,因为 JFrame 不支持此方法
  3. 您不应该在顶级容器(例如 JFrame)上执行自定义绘制,而应该使用 JPanel 之类的东西并覆盖它的 paintComponent 方法(确保首先调用 super.paintComponent)。
  4. 您还应该避免在您要重写的任何 paintXxx 方法中调用任何可能触发重绘的方法...例如 repaint

Graphics 上下文是共享资源,这意味着您所获得的Graphics 上下文已用于在您之前绘制 UI 中的所有其他组件。 paintComponent 负责通过清除要绘制的区域来准备用于绘制的 Graphics 上下文。

我建议您仔细阅读Custom Painting

我还会避免 KeyListener 并使用 Key Bindings API相反。

关于Java球移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17158476/

相关文章:

java - 静态字段的范围是什么?

c - 逐行读取C

java - Toast 在 Android 4.3 中不起作用

java - 在java反序列化过程中如何获取字段值?

c++ - 沿直线移动的算法

python - 如何在 Python 中将段落添加到列表中

javascript - Jscript-ASP 中的异常行号

silverlight - 从Silverlight RichTextBox获取行数?

java - 模拟 SWT 打印机

java - Mac 用户无法访问 BigblueButton 远程类,因为 Apple 已禁用 java