gpt4 book ai didi

java - 我的代码在旧 Macbook Pro 上运行得比在新 Surface Pro 上运行得更好

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:57 24 4
gpt4 key购买 nike

我目前正在开发一款完全用 Java 编写的游戏。截至目前,我的主循环正在 Action Performed 方法中运行,该方法由计时器每 100 秒更新一次。在这个循环中,代码会重新绘制,并对玩家位置、敌人位置等进行大量数学计算。我的代码运行得非常正常,在我的 2009 年中的 MacBook Pro 上并没有落后太多,而且奇怪的是,它在我的 friend (非常)新的 Surface Pro 4(一台显然更优秀的机器)上运行得非常糟糕。它在我的 (AMD) 台式电脑上也运行得非常好。我使用 VisualVM 和任务管理器运行了一些诊断程序和一些示例,虽然它不会占用太多机器资源,但在 Surface Pro 上它以 4 或 5 FPS 的速度运行,主要是因为我的绘画组件。我的 pain(t) 组件很大,它包含大量循环,用于数组列表中的粒子、数组列表中的敌人、数组列表中的敌人粒子等。所有这些都需要绘制。 (随着时间的推移,它们会被删除,所以这不是问题)。为什么我的旧 MacBook 运行这个程序比我 friend 的新 Surface Pro 好得多?有更好的方法来运行代码吗? 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();
}

}

最佳答案

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

网上有很多关于如何编写可用示例的示例。

  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,但是算法应该是一样的)

关于java - 我的代码在旧 Macbook Pro 上运行得比在新 Surface Pro 上运行得更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43074484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com