当我从eclipse运行我的程序时,它运行正常,CPU负载很小。 JProfiler(观看从eclipse运行的程序)说大多数都是通过碰撞检测和绘图来实现的。当JProfiler正在观看已编译的jar运行时,97%的cpu使用来自drawImage。它运行了两次 - 在日食中快三倍。
为什么会这样?
这会加载一次以从精灵表中取出图像(所有图像都是缓冲图像)
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;
}
}
}
在此之后,精灵被保存到相应的对象中 (也只叫一次)
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);
EDIT ----- 非常感谢!程序现在正常运行(在更新我的JRE之后)虽然我似乎弄乱了一些事情并且花了很多时间让eclipse再次运行,但是,嘿,它有效!
答案 0 :(得分:1)
我最好的猜测是eclipse使用的是比你的系统默认使用的更稳定的java版本。没有一些代码就无法说出来。
--- ---编辑
在命令提示符下使用“java -version”并设置你的eclipse项目使用它。那应该是一样的。
答案 1 :(得分:0)
您是否有机会将jar上传到网络服务器?如果是这样,那么服务器可能会导致速度减慢。