私はゲームを作成しています。最初は主にロジックに取り組んでいますが、シンプルで迅速に作成できる描画方法があります。
public class Draw extends JPanel {
private static final long serialVersionUID = 1L;
// BufferedImage heroitext;
Hero hero;
Vector<Enemy> enemies;
Vector<Bullet> ammo;
Vector<Terrain> terrains;
public Draw() {
// (int)try {
// heroitext = ImageIO.read(getClass().getResource("/images/circulo.png"));
// } catch (IOException e) {
// e.printStackTrace();
// }
}
public void render(Level lvl) {
hero = lvl.getHero();
ammo = lvl.getAmmo();
enemies = lvl.getEnemies();
terrains = lvl.getTerrains();
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("drawing");
//draw Hero
g.drawRect((int)hero.getX(), (int)hero.getY(), hero.getWidth(), hero.getHeight());
//draw Enemies
for(int i=0; i<enemies.size(); i++)
{
if(!enemies.get(i).isToKill()) g.drawRect((int)enemies.get(i).getX(), (int)enemies.get(i).getY(), enemies.get(i).getWidth(), enemies.get(i).getHeight());
for(int j=0; j<enemies.get(i).getAmmo().size(); j++)
{
g.drawRect((int) enemies.get(i).getAmmo().get(j).getX(), (int)enemies.get(i).getAmmo().get(j).getY(), enemies.get(i).getAmmo().get(j).getWidth(), enemies.get(i).getAmmo().get(j).getHeight());
}
}
//draw Ammo
for(int i=0; i<ammo.size(); i++)
{
g.drawRect((int)ammo.get(i).getX(), (int)ammo.get(i).getY(), ammo.get(i).getWidth(), ammo.get(i).getHeight());
}
//draw Terrains
for(int i=0; i<terrains.size(); i++)
{
g.drawRect((int)terrains.get(i).getX(), (int)terrains.get(i).getY(), terrains.get(i).getWidth(), terrains.get(i).getHeight());
}
}
}
通常は問題なく動作しますが、コードを変更していない場合でも、一部の Run で白い画面が表示され、いくつかの println で、コードが repaint() に到達しても、paintComponent メソッドが呼び出されないことがわかりました。全て。
私が言ったように、これは時々起こるだけで、ITは予測できないようです.
もう 1 つの問題は、約 50000 の敵を敵ベクトルに追加すると、何度実行しても、paintComponent が呼び出されないことです。私が調査したことから、別のパネルがすでに描画されるのを待っている場合(またはそのようなもの)、Javaがパネルを描画することを気にしないためだと言う人もいますが、何も変更しないため、最初のケースでは意味がありませんコード。
誰かが実際に何が起こっているのか、それを適切に修正する方法を説明できますか?