1

当我从 Eclipse 运行我的程序时,它运行良好,CPU 负载很少。JProfiler(观察从 eclipse 运行的程序)说大部分都被碰撞检测和绘图占用了。当 JProfiler 在观察编译后的 jar 运行时,它 97% 的 cpu 使用来自于 drawImage。它的运行速度大约是 Eclipse 的两倍 - 三倍。

为什么是这样?

这会加载一次以从精灵表中获取图像(所有图像都是缓冲图像)

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);

编辑-----非常感谢!该程序现在可以正常运行(更新我的 JRE 之后),虽然我似乎搞砸了一些东西,并且花了很多时间才能让 eclipse 再次运行,但是嘿,它有效!

4

2 回答 2

1

我最好的猜测是 eclipse 使用的 java 版本比你的系统默认设置的更稳定。没有一些代码真的无法分辨。

---编辑---
在命令提示符下使用“java -version”并将你的eclipse项目设置为使用它。那么它应该是一样的。

于 2012-05-28T03:12:31.840 回答
0

您是否有机会将 jar 上传到网络服务器?如果是这样,减速可能是由该服务器引起的。

于 2012-05-28T03:09:53.690 回答