2011-09-27 5 views
3

J'écris un jeu en Java. Et, oh, je me demande, j'ai des problèmes de performance. J'ai comparé la peinture elle-même - 1000 cycles en 3 ms. La logique du jeu est même en dessous de ça. Jusqu'ici tout va bien. Mais je rencontre toujours un décalage ennuyeux: Lors du défilement, lors du zoom, en cliquant. Les problèmes s'aggravent lorsque je zoome et que plus d'objets sont placés. Mais encore - même quand je boucle la peinture un 1000 fois les décalages reste plus ou moins la même chose, de sorte que ne peut pas l'être. J'ai essayé de mettre la boucle dans une tâche - toujours la même chose. J'ai essayé de mettre en pause la tâche entre les peintures - toujours la même chose. Les animations fonctionnent aussi bien que la soie (puisque le framerate est stable et élevé, cela a du sens). Alors, comment diable puis-je organiser les entrées d'une manière ordonnée? Mettez-les tous dans un fil séparé? Toute contribution serait et sera grandement appréciée!Lag en Java Jeu

+4

1000 cycles en 3ms. Êtes-vous sûr? C'est 333000 fps. – toto2

+2

Lorsque vous "mettez en pause la tâche entre les peintures", êtes-vous sûr de ne pas mettre en pause tout le fil d'événement Swing (ou AWT)? – toto2

+0

maintenant que vous le mentionnez 333000fps sonne un peu beaucoup ... assez sûr que je me suis trompé;) – julian

Répondre

9

Il semble que vous utilisiez des rappels d'écouteur directement sur le thread d'envoi d'événements Swing, où les mises à jour de l'interface utilisateur sont en cours. Vous devez utiliser une file d'attente de commandes et mettre des événements dans la file d'attente lorsqu'un rappel est appelé, avec la nature de la commande, puis l'utiliser dans la boucle principale de mise à jour du jeu qui n'a rien à voir avec l'EDT.

+0

je ne peux pas l'essayer maintenant, mais cela devrait effectivement faire l'affaire. Merci! – julian

+1

l'a essayé, fonctionne luke un charme. Millions de fois merci! – julian