为什么这些代码在某些设备上运行缓慢?

时间:2010-07-21 21:11:11

标签: java-me

请看这个代码,当我在诺基亚N97上运行它的运行非常慢,但我在三星corby上测试它运行真,我想如果我使用游戏画布问题解决。我该怎么做才能解决这个问题。

public class MIDPCanvas extends GameCanvas implements Runnable {

Graphics g;
Image img;
int x = getWidth() / 2;
Thread t = new Thread(this);

public MIDPCanvas() {
    super(true);

    try {
        img = Image.createImage("/pic.jpg");
    } catch (IOException ex) {
        ex.printStackTrace();
    }

    g = getGraphics();
    g.setColor(150, 230, 200);
    g.fillRect(0, 0, getWidth(), getHeight());

    t.start();
}

public void run() {
    while (true) {
        g.drawImage(img, x, getHeight() / 2, Graphics.VCENTER | Graphics.HCENTER);
        x--;
        flushGraphics();
    }
   }
}

谢谢

3 个答案:

答案 0 :(得分:0)

由于run()中有一个无限循环,我猜想Corby上while循环块中的一个调用,或者该设备以某种方式限制了你的进程:

    while (true) {
        g.drawImage( ... );
        x--;
        flushGraphics();
    }

答案 1 :(得分:0)

这是一种非常糟糕的动画制作方式。

如果必须使用无限循环方法,则在每次迭代时至少包含yield()Thread.sleep(100)。但更好的方法是使用Display.callSerially()。这将确保设备尽可能快地进行动画制作。

Google是您的朋友,可以解释有关如何使用此方法的所有信息。

就个人而言,在使用大量动画的高复杂度J2ME应用程序的多年中,我从未使用GameCanvas - 始终Canvas,覆盖paint()方法并使用动画制作callSerially()

答案 2 :(得分:0)