0

私はゲームを作成しています。最初は主にロジックに取り組んでいますが、シンプルで迅速に作成できる描画方法があります。

   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がパネルを描画することを気にしないためだと言う人もいますが、何も変更しないため、最初のケースでは意味がありませんコード。

誰かが実際に何が起こっているのか、それを適切に修正する方法を説明できますか?

4

0 に答える 0