我正在尝试从列表数组呈现到 JPanel。我已经创建了自己的 2D 渲染器,但是当我尝试使用 RenderAdd 函数添加到列表中时,它要么不添加,要么列表数组不允许读取列表......他的代码启动它。
JFrame frame = new JFrame();
frame.setSize(900, 500);
frame.setVisible(true);
Render render = new Render(new RenderDimension(frame.getX(),frame.getY(),frame.getWidth(),frame.getHeight()), frame);
BufferedImage zombie = new ImageLoader().readImage("zombie");
BufferedImage player = new ImageLoader().readImage("player");
render.RenderAdd(new RenderImage(new RenderDimension(100, 100, player.getWidth(), player.getHeight()), player));
render.RenderAdd(new RenderImage(new RenderDimension(0, 0, zombie.getWidth(), zombie.getHeight()), zombie));
render.start();
render.RenderAdd(new RenderImage(new RenderDimension(200, 100, player.getWidth(), player.getHeight()), player));
'render' 是渲染部分的主要渲染类。然后,RenderAdd 添加一个 RenderImage,它的 RenderDimension 是对象的 x 和 y,以及图像的宽度和高度。然后也将 BufferedImage 作为参数。
虽然,每次我尝试运行该程序时,它都会出现一个空白屏幕
现在,在 Render 类中,有另一个类扩展了一个线程。这是一个将框架作为参数的类,删除内容并开始绘制到 getContentPane()。下一个代码在 renderthread 类的 paintComponent() 函数中。不幸的是,没有任何东西可以绘制,但是确实可以处理,因为我尝试过使用 System.out.print("h") 重复打印自身。
for (RenderImage r : render.getList()){
int x = r.getSize().getX();
int y = r.getSize().getY();
int wi = r.getSize().getWidth();
int hi = r.getSize().getHeight();
if (x + wi >= -1 && x + wi <= d.getWidth()){
if (y + hi >= -1 && y + hi <= d.getHeight()){
g.drawImage(r.getImage(), x, y, null);
}
}
}
frame.getContentPane().add(p);
frame.getContentPane().validate();
frame.getContentPane().repaint();
我认为问题在于列表不会添加,所以这就是那部分。
List<RenderImage> render = new ArrayList<RenderImage>();
public List<RenderImage> getList(){
return render;
}
public void RenderAdd(RenderImage renders){
render.add(renders);
}