我正在编写一个2D策略游戏,需要能够一次显示数百张图像。
到目前为止,我有很多课程,但我有一个困境,因为我担心我不够了解JFrame
组件。我写了一个较小的 3 类程序来显示我的问题:
首先,我有一个构造框架的主类:
import javax.swing.JFrame;
public class MainClass {
static JFrame Frame = new JFrame("MainFrame");
public static void main(String[] args){
Frame.add(new Board());
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frame.setSize(1024, 500);
Frame.setVisible(true);
Frame.setResizable(false);
}
}
目前,板类是位于程序中心并拉取所有字符串以使程序运行的类。以前我在互联网上看到的所有教程都指向在 Board 类中使用paint(Graphics g)
方法,但这给了我主要的困境。目前,每次我想在屏幕上绘制某些内容时,我都必须手动输入:
public board{
//......code....
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(b.getImage(0), 0, 0, null);//Black
g2d.drawImage(b.getImage(1), GameMachanic.getCurrentPosX(), GameMachanic.getCurrentPosY(), null);//background
g2d.drawImage(b.getImage(3), GameMachanic.getCurrentPosX(), GameMachanic.getCurrentPosY(), null);//background
//...more paint to screen code
}
//......code......
}
这种方法每隔几毫秒重新绘制一次,一切都很棒! 除了...现在我已经到了需要一次从不同类绘制数百个不同元素到屏幕上的地步,使用当前的方法,您必须手动键入每个绘制命令,使代码无效且坦率地说毫无意义。
因此,我尝试创建一个类来取代这种体力劳动的需求,使该方法可重用,但我发现很难使其工作:
public class GraphicsPaint extends JFrame{
public void paint(Graphics g, ){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(b.getImage(0), 0, 0, null);//image
}
}
但是如何将此类实现到我的代码中,我是否将其添加为组件?(如果是这样,如何?因为我试过这个,它只是给我抛出了一个错误,我尝试使用一些布局,但它们只是由于某种原因出现故障。
我是否将它们添加到面板?我不知道结果如何。
除此之外,我一无所知,因为我花了一整天的时间研究这个问题。
一次将数百张图像绘制到
JFrame
的有效方法是什么?
- 将它们放在集合中,例如
ArrayList
. - 循环迭代集合。
- 在循环主体中,依次绘制集合的每个成员。