2011-08-28 4 views
4

J'ai un JFrame dans lequel j'utilise Graphics2D pour dessiner un VolatileImage en utilisant le tutoriel this. J'ai principalement copié le code pour voir comment cela fonctionne, mais je l'ai légèrement modifié pour mon jeu. Je cours mon ordinateur avec deux écrans.VolatileImage JFrame sur plusieurs écrans

Le problème se pose lorsque je fais glisser la fenêtre du jeu sur l'autre écran sur lequel la fenêtre n'apparaissait pas à l'origine. La fenêtre devient grise et aucun graphique n'est affiché à l'écran, même les simples rectangles que j'ai dessinés avec le Graphics2D. Cela ne se produit que lorsque j'appelle la méthode draw de l'image volatile, comme indiqué dans le tutoriel.

Je crois qu'il peut avoir quelque chose à voir avec cette ...

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); 

... mais je ne suis pas sûr.

Toute aide serait grandement appréciée :) Il serait également intéressant de savoir si VolatileImage est la façon dont je devrais aller pour mon jeu ou si BufferedImage ou quelque chose d'autre est une meilleure méthode pour la performance et la cadence :)

Répondre

4

Oui, vous avez raison. VolatileImage est spécifique à l'appareil. De "The VolatileImage API User Guide" vous pouvez lire:

Un VolatileImage est spécifique à l'appareil: si vous avez créé un VolatileImage avec un GraphicsDevice, vous pourriez ne pas être en mesure de copier ce VolatileImage à un autre GraphicsDevice. Pour cette raison, vous devez appeler valider avant d'essayer de copier le VolatileImage.

et

Si le code est IMAGE_INCOMPATIBLE alors le VolatileImage n'est pas compatible avec le GraphicsConfiguration courant. Cette incompatibilité peut se produire si l'image a été créée avec un GraphicsConfiguration et ensuite dessinée dans un autre. Par exemple, dans une situation de plusieurs moniteurs, le VolatileImage existe est associé à un GraphicsConfiguration particulier. La copie de cette image sur un GraphicsConfiguration différent peut entraîner des résultats imprévisibles. Pour corriger ce problème, vous devez créer un nouveau VolatileImage qui est compatible avec le courant GraphicsConfiguration

Lorsque vous faites glisser votre image vers un autre appareil de l'écran, vous devez vérifier le résultat de la méthode VolatileImage.validate(gc) de votre et de recréer l'image sur le nouvel appareil. Notez qu'il existe des cas où vous ne pouvez pas créer un VolatileImage, dans ces cas, vous devez vous rabattre sur une autre implémentation Image comme BufferedImage.

+0

Est-ce que VolatileImage vaut la peine alors sur BufferedImage? :) – Humphrey

+0

@Humphrey: Ils sont beaucoup plus rapides. Mais dans votre cas, il pourrait être une optimisation prématurée, je recommanderais d'essayer 'BufferedImage' d'abord. :) – dacwe

Questions connexes