1

Eclipse からプログラムを実行すると、CPU にほとんど負荷をかけずに正常に実行されます。JProfiler (Eclipse から実行されるプログラムを監視) は、ほとんどが衝突検出と描画によって占められていると述べています。JProfiler がコンパイルされた jar の実行を監視している場合、その CPU 使用率の 97% は drawImage によるものです。日食では 2 倍から 3 倍の速さで走っています。

どうしてこれなの?

これは、スプライト シートから画像を取得するために 1 回読み込まれます (すべての画像はバッファリングされた画像です)。

SpriteMan(Map xMap, Board xBoard)
    {
        mMap = xMap;
        mBoard = xBoard;
        try
        {
            bigImg = ImageIO.read(new File("sprites.PNG"));
            background = ImageIO.read(new File("background.PNG"));
        }
        catch (IOException e) 
        {
            System.err.println("Caught IOException: " + e.getMessage());
        }

        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                sprites[i][j] = bigImg.getSubimage(i * width,j * height,width,height);

                iSprites[i][j] = config.createCompatibleImage(width, height, Transparency.TRANSLUCENT);
                //iSprites[i][j] = toImage(sprites[i][j]);

                for(int x = 0; x<32; x++)
                {
                    for(int y = 0; y<32; y++)
                    {
                        iSprites[i][j].setRGB(x, y, sprites[i][j].getRGB(x,y));
                    }
                }

                loadedImage+=1;

            }
        }

    }

この後、スプライトは対応するオブジェクトに保存されます (これも 1 回だけ呼び出されます)。

BlockGround(Map xMap, int X, int Y)
    {
        super(xMap, X, Y);

        mSprite = mMap.mBoard.mSpriteMan.sprites[0][0];
        mCollidable = true;
        mChar = 'G';
    }

ブロックは次を使用して描画されます。

g2.drawImage(mSprite,null, x, y);

編集-----どうもありがとうございました! プログラムは現在正常に実行されています (JRE を更新した後)。

4

2 に答える 2

1

私の最善の推測は、システムがデフォルトで使用するように設定されているよりも安定したバージョンの Java を Eclipse が使用していることです。いくつかのコードがないと本当にわかりません。

---編集---
コマンド プロンプトで「java -version」を使用し、それを使用するように Eclipse プロジェクトを設定します。それは同じでなければなりません。

于 2012-05-28T03:12:31.840 に答える
0

ひょっとして、jar ファイルを Web サーバーにアップロードしたのでしょうか。その場合、速度低下はそのサーバーが原因である可能性があります。

于 2012-05-28T03:09:53.690 に答える