2012-05-24 189 views
0

我想创建一个java游戏,其中球从屏幕顶部随机放下,我们需要使用位于屏幕底部的捕捉器捕捉球。简单的2D 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); 


} 

我试着在我的麦田类这样的事情...

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

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

任何帮助将不胜感激。

+0

我重新标记为“摇摆”,因为这不是“游戏开发”,但您有通用的摇摆问题。您的Catcher子类是什么类?你有没有把你的Catcher实例添加到你的JFrame中?显示更多代码,我猜。 – maksimov

+0

我已经添加了一些代码 - 希望这可以让事情变得更清晰。 – user432584920684

+1

为了更好地提供帮助,请发布[SSCCE](http://sscce.org/)。 –

回答

3

您需要重新考虑您的策略。 Swing是一个组件框架,大多数组件都是用来构建用户界面的。这些组件并未针对游戏中通常需要的内容进行优化。你想看看双缓冲,精灵等。要走的路将是读取Graphics2D类(或放弃Swing干什么!)

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

this.add(playerOneCatcher); 

同去gameScreen但是从你的代码段不是很明显这个组件是什么。我希望这有帮助。

此外,检查了这一点的一些想法:2D Java Game. Moving sprite above tiled images

2
  1. 您是否拨打super.paintComponent (g)?这可能会导致一些错误。
  2. 您是否拨打invalidate()repaint()重新绘制您正在绘制的东西?我希望你有一个特殊的JComponent,并且你不是在JFrame上绘图。这是不好的。