0

我正在尝试创建一个 java 游戏,其中球从屏幕顶部随机掉落,我们需要使用位于屏幕底部的捕手来接球。

我很难弄清楚如何将它实际绘制到我的 JFrame 上。

我为我的“接球手”、“球”、“游戏空间”开设了一门课,我想把它们放在一起。

如何在屏幕上绘制我的“捕手”?

目前,我有一个看起来像这样的“游戏”类。

public class Game extends JFrame implements KeyListener {

GameScreen gameScreen;
Catcher playerOneCatcher;

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

public Game() {

    super("CATCH");
    setSize(640,480);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setLocationRelativeTo(null);
    setResizable(false);
    addKeyListener(this);


    this.gameScreen = new GameScreen();
    this.playerOneCatcher = new Catcher(40, 10); 


}

我在 Catcher 课上尝试过这样的事情......

public void paintComponent(Graphics g) {
    g.setColor(Color.BLUE);
    g.fillRect(positionX, positionY, this.width, this.height);
}

但是,它没有显示在我的屏幕上。

任何帮助将不胜感激。

4

2 回答 2

3

你需要在这里重新考虑你的策略。Swing 是一个组件框架,其中大多数组件用于构建用户界面。这些组件并未针对游戏中通常需要的内容进行优化。您想研究双缓冲、精灵等。要走的路是阅读 Graphics2D 类(或完全放弃 Swing!)

但是回答您的问题 - 如果 Catcher 是 Swing 组件 - 您需要将其添加到“父”组件中,例如:

this.add(playerOneCatcher);

同样适用,gameScreen但从您的代码段来看,这个组件是什么并不明显。我希望这有帮助。

另外,请查看以下内容以获取一些想法:2D Java 游戏。在平铺图像上方移动精灵

于 2012-05-24T09:37:04.107 回答
2
  1. 你打电话了super.paintComponent (g)吗?这可能会导致一些错误。
  2. 你打电话invalidate ()还是repaint ()重新粉刷你正在绘画的东西?我希望你有一个特殊的 JComponent,而不是在 JFrame 上绘图。这是不好的。
于 2012-05-24T09:21:45.493 回答