我的旧Macbook Pro上的代码比新的Surface Pro更好

时间:2017-03-28 16:01:50

标签: java

我目前正在用Java完全开发游戏。截至目前,我的主循环正在一个Action Performed方法中运行,该方法每100秒由一个计时器更新。在那个循环中,代码重新绘制并为玩家位置,敌人位置等进行了一系列数学计算。我的代码运行正常并且在我2009年中期的macbook pro上没有太多差距,并且奇怪的是我的代码运行得非常糟糕朋友(非常)新的Surface Pro 4(一台非常出色的机器)。它在我的(AMD)台式机上运行得非常好。我使用VisualVM和任务管理器运行了一些诊断和一些示例,虽然它不占用大部分机器资源,但它在Surface Pro上以4或5 FPS运行,主要是因为我的绘图组件。我的痛苦(t)成分是巨大的,它包含了大量的arraylists中的粒子循环,arraylists中的敌人,arraylists中的敌人粒子等等。所有这些都需要绘制。 (它们会随着时间的推移而删除,因此不是问题)。为什么我的旧macbook在运行这个程序方面比我的朋友新表面专业人士好多了?有没有更好的方法来运行代码? Github链接到这里:https://github.com/gkgkgkgk/JetGame谢谢! (另外,如果可以的话,请在您的计算机上测试它并让我知道它是如何运行的!)

这是我最小的,可验证的代码:

public class Test extends JPanel implements KeyListener {
JFrame w;

Timer t = new Timer();


double elapsedTime = 0.016;

public Test() {
    w = new JFrame();
    w.setSize(1280, 720);
    w.setContentPane(this);
    w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    w.addKeyListener(this);
    w.setResizable(false);
    w.setVisible(true);
    loop();

}

public void loop() {
    t.scheduleAtFixedRate(new TimerTask() {
        public void run() {

            //does calculations
            repaint();

        }
    }, 0, 16);
}





public void keyPressed(KeyEvent e) {
    //booleans are set to true and falso for movement in these methods

}
public void keyReleased(KeyEvent e) {



}
public void keyTyped(KeyEvent e) {}




public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g; // Create a Java2D version of g.
    //painting is done in a bunch of nested for loops here

}

void calculateFPS(long x) {
    System.out.println(1000 / (System.currentTimeMillis() - x) + "FPS");
}
public static void main(String[] args) {
    new Test();
}

}

1 个答案:

答案 0 :(得分:0)

您应该尝试创建自己的游戏循环,而不依赖于util定时器。

网上有很多关于如何编写工作单的例子。

  1. http://www.java-gaming.org/index.php?topic=24220.0
  2. https://github.com/SilverTiger/lwjgl3-tutorial/wiki/Game-loops(本教程适用于LWJGL,但我非常喜欢)
  3. https://lwjglgamedev.gitbooks.io/3d-game-development-with-lwjgl/content/chapter2/chapter2.html(这也是LWJGL,但算法应该相同)
相关问题