1

我对 Java(C# 程序员)很陌生,我在这里遇到了一个我不明白的问题。对不起糟糕的英语。=)

我正在开发一个简单的 Snake 游戏,我有不同的类、枚举等。我的问题是,如果我使用 Menu 类中的游戏调用 JFrame,它不会做任何事情。我可以通过代码进行调试,但它没有绘制任何东西。如果我直接从 Main 方法启动 Game 类,没有问题。

我认为这是一个简单的错误,我只是愚蠢地看到它。

这里的代码:

鼠标事件:

else if (mouseX > 75 && mouseX < 175 && mouseY > 260
                && mouseY < 285) {
            startGame();

Menu 类中的 startGame 方法:

public void startGame(){
    this.setVisible(false);
    game = new Game();
}

游戏构造器:

public Game() {
    super("Snake V 0.1");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(940, 620);
    setLocation(200, 200);
    addKeyListener(keyListener);
    setVisible(true);
    //this.createBufferStrategy(2);

    zeichnung.addFigur(new Field(0, 0));
    snake = new Snake(40, 300, 1);
    zeichnung.addFigur(snake);
    zeichnung.addFigur(new Diamond());

    this.getContentPane().add(jpanel);

    this.repaint();

    this.Intervall();
}

间隔:

public void Intervall() {
    while (true) {
        try {
            snake.direction = keyListener.getDirection();
            zeichnung.checkCollision(snake);
            snake.move();
            this.repaint();
            Thread.sleep(150);
        } catch (InterruptedException e) {
            // TODO: handle exception
        }
    }
}

正如我之前所说。如果我直接从 Main 方法启动 Game 类(简单的 Game game = new Game();)就没有问题。

我希望我不会忘记任何重要信息。

4

1 回答 1

1

它根本不应该在任何 Swing GUI 中工作。

Thread.sleep() 杀死重绘和监听。

有关问题的示例,请参见此处的最终帖子

http://www.coderanch.com/t/600642/GUI/java/update-getGraphics

改用摆动计时器

于 2013-01-05T23:32:31.403 回答