繁体   English   中英

为什么这不绘制我的多边形? (Java游戏)

[英]Why does this not draw my Polygon? (Java game)

基本上,显示的只是一个 JFrame,里面有黑色的 JPanel,但在任何地方都没有球/多边形。 现在真的很烦我,我看不出原因。 非常感谢任何帮助。

编辑:添加代码。 很抱歉在 Github 上发帖,不知道有人不赞成。

public class Board extends JFrame {
    private int width = 800;
    private int height = 1000;
    private int currentKeyCode = 0;
    private boolean keyHeldDown = false;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    Board b = new Board();
                    b.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Board() {
        setSize(width, height);
        setTitle("Drop");
        setBackground(Color.BLACK);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    currentKeyCode = KeyEvent.VK_RIGHT;
                    keyHeldDown = true;
                    System.out.println("Right + 10");
                }
                if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    currentKeyCode = KeyEvent.VK_LEFT;
                    keyHeldDown = true;
                    System.out.println("Left + 10");
                }
                if (e.getKeyCode() == KeyEvent.VK_P) {
                    currentKeyCode = KeyEvent.VK_P;
                    keyHeldDown = true;
                    System.out.println("Pause");
                }
            }

            @Override
            public void keyReleased(KeyEvent e) {
                keyHeldDown = false;
            }
        });
        setContentPane(new Panel(this));
        ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5);
        executor.scheduleAtFixedRate(new RepaintBoard(this), 0L, 20L, TimeUnit.MILLISECONDS);
    }

    @Override
    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    @Override
    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    private class RepaintBoard implements Runnable {
        final Board board;
        public RepaintBoard(Board board) {
            this.board = board;
        }
        @Override
        public void run() {
            board.repaint();
        }
    }
}

 class Panel extends JComponent {
    Ball ball;
    private Board board;
    public Panel(Board board) {
        this.board = board;
        ball = new Ball();
    }

    @Override
    public void paint(Graphics g1) {
        Graphics2D g = (Graphics2D) g1;
        g.setColor(Color.BLACK);
        g.drawRect(0, 0, board.getWidth(), board.getHeight());
        g.drawPolygon(ball);
    }
}

class Ball extends Polygon {
    private int radius = 5;
    private Point loc;
    private int[] xPos = new int[radius * 2 + 1];
    private int[] yPos = new int[radius * 2 + 1];
    public Ball() {
        for (int i = -radius, j = 0; i <= radius; i++, j++) {
            xPos[j] = i;
            yPos[j] = i;
        }
        new Ball(xPos, yPos, radius * 2 + 1, 100, 100);
    }

    public Ball(int[] xPos, int[] yPos, int points, int x, int y) {
        super(xPos, yPos, points);
        loc = new Point(x, y);
        for (int i : xPos) {
            System.out.println(i);
        }
    }
}
  1. 不要让Ball延伸Polygon

  2. Ball类中放置一个drawBall(Grapchics g) {}方法,然后在那里画球。

  3. paint调用drawBall方法

    ball.drawBall(g);
  4. 不要覆盖paint ,而是覆盖面板上的paintComponent ,并且不要忘记调用super.paintComponent

     @Override protected void paintComponent(Graphics g) { super.paintComponent(g); }
  5. 这个new Ball(xPos, yPos, radius * 2 + 1, 100, 100); 在你的构造函数中绝对不做任何事情。 而应该只使用第二个构造函数,并构造函数创建球。 每个球都应该不同,因此无参数构造函数毫无意义

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM