好的,我有两个类似的类(图形以相同的方式设置),另一个类显示在底部。如您所见,我想同时显示两个graphics2ds,并且item类是透明的且位于顶部(items类几乎没有内容,而游戏类完全被图片等覆盖)

有什么办法吗?

当前,物品类比游戏类具有更高的优先级,因为它被称为最后一个,并且完全阻塞了游戏类。

public class game extends Canvas implements Runnable
{

public game()
{
     //stuff here


    setBackground(Color.white);
    setVisible(true);

    new Thread(this).start();
    addKeyListener(this);
}

public void update(Graphics window)
{
   paint(window);
}

public void paint(Graphics window)
{
    Graphics2D twoDGraph = (Graphics2D)window;

    if(back==null)
       back = (BufferedImage)(createImage(getWidth(),getHeight()));

    Graphics graphToBack = back.createGraphics();

//draw stuff here

    twoDGraph.drawImage(back, null, 0, 0);
}


public void run()
{
try
{

while(true)
    {
       Thread.currentThread();
       Thread.sleep(8);
        repaint();
     }
  }catch(Exception e)
  {
  }
}

}


第二课

public class secondary extends JFrame
{
private static final int WIDTH = 800;
private static final int HEIGHT = 600;

public secondary()
{
    super("Test RPG");
    setSize(WIDTH,HEIGHT);

    game game = new game();
    items items = new items();

    ((Component)game).setFocusable(true);
    ((Component)items).setFocusable(true);
    getContentPane().add(game);
    getContentPane().add(items);

    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main( String args[] )
{
    secondary run = new secondary();

}
}

最佳答案

这是我的建议:


扩展JComponent而不是Canvas(您可能需要轻量级的Swing组件,而不是重量级的AWT组件)
然后,不必为图形的手动后备缓冲而烦恼-Swing会自动为您进行后备缓冲(这样做时可能会使用硬件加速)
让一个组件同时绘制项目和游戏背景的其余部分。没有充分的理由单独进行操作(即使仅更改项目图层,由于透明效果,也需要重新绘制背景)
将您的班级名称大写,看到小写的班级名称会让我头疼:-)


编辑

典型地,该方法将是具有代表游戏的可见区域的类,例如。 GameScreen,带有paintCompoent方法,如下所示:

public class GameScreen extends JComponent {
  ....

  public void paintComponent(Graphics g) {
    drawBackground(g);
    drawItems(g);
    drawOtherStuff(g); // e.g. animated explosions etc. on top of everything else
  }
}

关于java - 多个graphics2d,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12613126/

10-09 02:58