2011-04-07 48 views
0

我有一个程序,其中的基础面板只是绘制背景(树木,水等),我有一个球员和其他物体在屏幕上移动。我不想在整个事情上调用repaint(),因为它减慢了我的速度,因为它重新绘制了整个事情。当我尝试在顶部添加一个新面板并重新处理移动对象时,我的代码中没有任何反应。这是我在构造函数的第一在另一个上面绘制新面板

public GamePanel() 
{ //some code 
    top = TopPanel(); 
    top.setSize(this.getSize()); 
    add(top); 
//some more code 
} 

,然后在类的toppanel

public TopPanel() 
    { 

    } 
    public void paintComponent(Graphics g) 
    { 
     i.drawItem(//); 
     player.draw(//fields); 
    } 

而且不管我做什么,我不能得到任何东西出现在当我运行它的面板。

+0

您使用的是什么布局管理器,空布局?如果是这样,您需要设置TopPanel的位置和大小。 – MeBigFatGuy 2011-04-07 00:37:14

+0

为了更快得到更好的帮助,请发布[SSCCE](http://pscode.org/sscce.html)。 – 2011-04-07 00:45:18

+0

我已经尝试过,唯一那种工作是重写paintChildren,但这只会让事情变得更慢。 – 2011-04-07 00:46:14

回答

2

当我在绘制一个复杂但静态的“背景”时将其他东西绘制在顶部,我的一般方法是将背景绘制为BufferedImage,并在绘制动态部分之前简单地重绘图像。

+0

谢谢,这就像一个魅力,我不知道为什么我没有想到它之前。 – 2011-04-07 01:53:24

+2

@Sasha:你可能想接受Andrew的答案。 – 2011-04-07 02:26:16

相关问题