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 を更新した後)。