爪球移动

时间:2013-06-17 23:28:47

标签: 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 个答案:

答案 0 :(得分:3)

  1. 您重写paint,但从不调用super.paint,这意味着该组件永远不会为新的绘制周期准备图形上下文,这意味着您之前绘制的内容仍然存在
  2. 永远不会调用您的paintComponent方法,因为JFrame不支持此方法
  3. 您不应该在顶级容器(例如JFrame)上执行自定义绘制,但应该使用JPanel之类的内容并覆盖它的paintComponent方法(确保您调用{ {1}}首先)。
  4. 您还应该避免调用任何可能在您覆盖的super.paintComponent方法中触发重绘的方法......例如paintXxx
  5. repaint上下文是一个共享资源,这意味着您之前使用的Graphics上下文用于绘制UI中的所有其他组件。 Graphics负责通过清除要绘制的区域来为绘画准备paintComponent上下文。

    我建议你仔细阅读Custom Painting

    我也会避免使用Graphics,而是使用Key Bindings API