简单的2D Java游戏

时间:2012-05-24 09:15:00

标签: java swing draw shapes

我正在尝试创建一个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);
}

然而,它没有显示在我的屏幕上。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

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

但回答你的问题 - 如果Catcher是Swing组件 - 你需要将它添加到“父”组件,例如像这样:

this.add(playerOneCatcher);

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

另外,请查看以下内容:2D Java Game. Moving sprite above tiled images

答案 1 :(得分:2)

  1. 您致电super.paintComponent (g)了吗?这可能会导致一些错误。
  2. 您是否致电invalidate ()repaint ()重新绘制您正在绘制的内容?我希望你有一个特殊的JComponent,而你没有使用JFrame。那不好。