7
votes

Comment aborder les variations de performance de Java 2D entre différents ordinateurs?

J'ai conçu un jeu de cartes à Java sous Windows. Cela fonctionne vraiment bien sur mon ordinateur portable et quelques autres, mais sur beaucoup d'autres systèmes (même quelques plus récents macs et Windows), l'animation est incroyablement lente.

J'ai trouvé utilisateur Boîte à outils d'interface pour Java comme la meilleure ressource jusqu'à présent, mais n'a pas été en mesure de faire une amélioration significative. J'utilise les bibliothèques AWT / SWING.

question:

Regardant Mon jeu , (<1,5 Mo), comment pourrait-il s'agir de certains ordinateurs (de la même spécification) le la performance semble être de manière significative moins que ce que c'est sur mon ordinateur portable? L'ensemble de l'application est entraîné par des événements et j'ai fait la majeure partie de l'optimisation que je pense que cela pourrait être fait compte tenu de la mise en œuvre.

J'ai un sentiment que c'est lié à la mémoire. Je crée (compatible), puis stockez toutes mes images dans un tableau au début, puis y référence là-bas.

note: j'ai décidé de faire ce jeu afin que je puisse apprendre et pratiquer de nouvelles idées, donc je n'essaye pas simplement de le partager - je suis vraiment intéressé à découvrir ce qui se passe ici. < / em>


2 commentaires

Pourriez-vous isoler un extrait et partagez-le? Aussi, avez-vous pensé à créer Images compatibles sur chaque plate-forme?


Corrigez-moi si je me trompe, mais ce code s'appelle une seule fois au démarrage du jeu, pour préparer l'ensemble des cartes? En supposant que le démarrage n'est pas le problème, où est le code qui dessine réellement les cartes dans le jeu?


4 Réponses :


3
votes

Pour le Mac, vous devriez essayer les propéritines du système et les astuces de rendu décrites Dans ce document, en particulier celui qui indique à Java d'utiliser le rendu de quartz natif plutôt que le rendu Sun.


3 commentaires

Cela pourrait-il cela? system.setproperty ("Apple.awt.graphics.usequartz", "vrai");


Oui, ce serait la première chose à essayer.


N'a fait aucune différence, désolé. :(



5
votes

sur tous les systèmes d'exploitation, le pipeline de rendu 2D Java prend en charge l'accélération matérielle par le GPU. Cela dépend de la mise en œuvre Java que vous utilisez.

L'une des nouvelles fonctionnalités de la mise en œuvre Java SE 7 de Oracle (qui sort à la fin du mois) est-ce: Pipeline Xrender pour Java 2D , ce qui signifie qu'il aura beaucoup mieux performant graphique 2D sur Linux.

Pour Windows, en Java SE 6 Mise à jour 10 Il y a eu quelques améliorations pour que Java 2D fonctionne mieux en utilisant l'accélération du matériel Direct3D ( source ).


6 commentaires

Merci pour la source. Je suis toujours très nouveau dans la majeure partie de cela, mais si le logiciel n'utilise pas l'accélération matérielle, la plupart des travaux sont-ils effectués par la CPU et non le GPU?


Oui, cela signifie que tout est fait dans des logiciels en cours d'exécution sur la CPU au lieu d'utiliser le matériel spécial dans le GPU pour faire des choses comme la copie du contenu de Windows, etc.


Il semble illogique de ne pas porter tout le rendu à travers le GPU alors de toute façon? (Pardonne certaines de ces questions naïves s'il vous plaît).


Oui, mais vous auriez besoin d'utiliser des API spéciales spécifiques à la plate-forme, telles que DirectX (sous Windows), je suppose que c'est plus facile et au moins plus portable, d'écrire un code ordinaire qui fait tout le travail sur la CPU.


Assez juste, je suppose que les développeurs supposent que lorsque vous atteignez la scène lorsque vous avez vraiment besoin d'une accélération du GPU, vous vous risquez de toute façon dans de telles technologies. Serait-il prudent de dire qu'une application de base 2D 2D Java 2D 2D comme mon jeu ne devrait pas avoir de problèmes de performance sur des machines décentes si elles sont bien codées?


Je n'ai pas regardé votre jeu, mais Java 2D est tout à fait capable, il ne devrait pas avoir de problèmes de performance si vous avez une machine décente.



3
votes

.. Pourquoi pourrait-il être que sur certains ordinateurs, la performance semble être au moins la moitié de ce que c'est sur mon ordinateur portable?

pilotes vidéo. J'ai été impliqué dans un fil sur Usenet il y a longtemps, où il y avait une différence phénoménale dans la vitesse de rendu sur des machines avec des spécifications similaires. En fin de compte, il a été conclu que certaines machines utilisaient des pilotes vidéo obsolètes et c'était la cause fondamentale de la différence.

Si cela s'avère être le cas ici, votre meilleur pari est probablement de faire un test de rendu. Vérifiez le FPS et s'il est trop bas, indiquez à l'utilisateur de mettre à jour les pilotes.


1 commentaires

D'accord sur le nouveau MacBook Pro's de My Mate, il était incroyablement lent sur Mac OSX, mais en cours d'exécution sur sa partition de Windows 7, était parfaitement lisse. Et c'est très nouveau, il l'a acheté il y a quelques mois. Les deux courants de nouvelles mises à jour JRE. Donc, je pense que le problème principal ici est comment Java fonctionne sur différents systèmes d'exploitation. Bien que je pense que je puisse faire un test pour vérifier votre suggestion de toute façon. Merci.



1
votes

Essayez de l'éclater dans un profileur et voyez ce qui se passe. Je le ferais sur Windows et Mac et comparer où vous obtenez exactement le problème. JProfiler est mon préféré, mais votrekit est bon aussi bien. Vous pouvez obtenir une version d'essai pendant 30 jours qui devrait comporter suffisamment de temps pour comprendre cela.

Il s'agit probablement de matériel graphique lié au matériel, accélération matérielle VS logiciel, car il existe une telle différence entre Mac et Windows notés sur ce fil.


1 commentaires

Je vais essayer et vous laisser savoir ce que je vois. Merci.