2009-09-09 3 views
2

Je crée Braid dans Netbeans 6.7.1.Java: la session de débogage de Netbeans fonctionne plus vite que la normale

Spec Computer:

Windows 7 
Running processes: 46 
Running threads: +/- 650 
NVidia GeForce 9200M GS 
Intel Core 2 Duo CPU P8400 @ 2.26Ghz 


Jeu-spec avec course normale:

Memory: between 80 MB and 110 MB 
CPU: between 9% and 20% 
CPU when time rewinding: 90% 

Les mêmes valeurs pour la session de débogage, sauf quand je rembobiner le temps: CPU: 20% .

Y a-t-il une raison pour cela? Existe-t-il un moyen d'atteindre la même performance avec une exécution normale.

Ceci est mon code de repeindre:

@Override 
public void repaint() 
{ 
    BufferStrategy bs = getBufferStrategy(); // numBuffers: 4 
    Graphics g = bs.getDrawGraphics(); 
    g.setColor(Color.BLACK); 
    g.fillRect(-1, -1, 2000, 2000); 
    gamePanel.paint(g.create(x, y, gameDim.width, gameDim.height)); 
    bs.show(); 
    g.dispose(); 
    Toolkit.getDefaultToolkit().sync(); 
    update(g); 
} 

Le jeu fonctionne en plein écran (+ undecorated frame.size = screensize)

Martijn

+0

La tresse est écrite en Java? soigné :), n'aurait pas deviné. –

+0

@OmryYadan: Non ce n'est pas. J'écrivais un clone à l'époque pour apprendre le développement de jeux. –

+1

explosion du passé, en réponse à un commentaire de 2009 :) –

Répondre

2

Quel cadre utilisez-vous? Ou en avez-vous écrit un vous-même? Dans ce dernier cas, utilisez-vous System.currentTimeMillis() ou System.nanoTime() pour limiter le FPS? Debugmode peut changer la résolution de la fréquence d'interruption du système d'exploitation sous Windows et donc changer la résolution de System.currentTimeMillis() aussi.

J'ai eu un cas similaire dans lequel mon jeu a fonctionné plus rapidement avec VisualVM. Utiliser System.nanoTime() au lieu de System.currentTimeMillis() pour calculer la valeur de Thread.sleep() l'a corrigé.

Vous pouvez en savoir plus sur ce sujet ici: http://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks

+0

c'est intresting, merci. Mais j'ajoute quelques infos sur le cpu. J'utilise deux threads: 1 updater, 1 repainter –

+0

Maintenant, quand je fais des jeux en Java, j'utilise toujours votre Bonsai Lib. J'aime beaucoup. –

1

La méthode repaint() est pas cher parce que plusieurs demandes sont traitées avant d'être coalescées. Je vais deviner que sous le débogueur plus de repeints sont coalesced dans les appels réels à paint(). Essayez de conserver un compteur mis à jour pour chaque appel à paint() ou paintComponent(). Si j'ai raison, vous devriez voir moins d'appels lors de l'exécution sous le débogueur.

Questions connexes