私は現在Javaで完全にゲームを開発中です。現時点では、私のメインループは100分の1秒ごとにタイマーによって更新されるアクション実行メソッドで実行されています。そのループでは、コードが再描画され、プレイヤーの位置、敵の位置などのための数式の計算が行われます。私のコードは完全に正常に実行され、2009年中頃のMacbookプロで遅れを取ることはありません。友人(非常に)新しい表面プロ4(明らかに優れたマシン)。また、私の(AMD)デスクトップPCでもうまく動作します。私はいくつかのサンプルをVisualVMとタスクマネージャーで実行しましたが、マシンリソースの大半を占めるわけではありませんが、Surface Proでは4〜5FPSで動作します。私の痛み(t)成分は巨大で、arraylistsのパーティクル、arraylistsの敵、arraylistsの敵のパーティクルなどのループのトンを含んでいます。それらのすべてが描かれる必要があります。 (それらは時間の経過とともに削除されるので、問題はありません)。なぜ私の古いマックブックは、私の友人の新しいサーフェイスプロよりこのプログラムを実行する方がはるかに優れていますか?コードを実行するより良い方法はありますか? Githubリンク:https://github.com/gkgkgkgk/JetGameありがとう!あなたは試してみてください私の古いMacBook Proより新しいコードが実行されました
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();
}
}
あなたはJVMを比較しましたバージョンと設定? –
最小限で完全で検証可能な例を提供してください。https://stackoverflow.com/help/mcve –
@DanielCentoreすぐに1つを提供します! –