4

このチュートリアルを使用してVolatileImageを描画するためにGraphics2Dを使用しているJFrameがあります。私は主にコードをコピーしてどのように機能するかを確認しましたが、ゲーム用に少し編集しました。2つの画面でコンピューターを実行しています。

ゲームのウィンドウを、ウィンドウが元々表示されていなかった別の画面にドラッグすると、問題が発生します。Graphics2Dで描いた単純な長方形でさえ、ウィンドウが灰色になり、グラフィックが画面に表示されません。これは、チュートリアルに示されているように、volatileimageのdrawメソッドを呼び出した場合にのみ発生します。

これと関係があるのではないかと思います...

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

...しかし、私にはわかりません。

どんな助けでも大歓迎です。VolatileImageが私のゲームに行くべき方法であるかどうか、またはBufferedImageまたは他の何かがパフォーマンスとフレームレートのより良い方法であるかどうかを知ることも興味深いでしょう。

4

1 に答える 1

3

はい。それで合っています。VolatileImageデバイス固有です。「VolatileImageAPIユーザーガイド」から次のように読むことができます。

VolatileImageはデバイス固有です。1つのGraphicsDeviceでVolatileImageを作成した場合、そのVolatileImageを別のGraphicsDeviceにコピーできない場合があります。このため、VolatileImageをコピーする前に、validateを呼び出す必要があります。

コードがである場合、はIMAGE_INCOMPATIBLE現在のVolatileImageと互換性がありませんGraphicsConfiguration。この非互換性は、イメージが1つで作成され GraphicsConfiguration、次に別のイメージに描画された場合に発生する可能性があります。たとえば、マルチモニターの状況では、VolatileImageexistsは特定のに関連付けられていGraphicsConfigurationます。その画像を別の画像にコピーすると、GraphicsConfiguration予期しない結果が生じる可能性があります。この問題を修正するにVolatileImageは、現在の問題と互換性のある新しいもの を作成する必要がありますGraphicsConfiguration

フレームを別の画面デバイスにドラッグするときは、のVolatileImage.validate(gc)方法の結果を確認し、新しいデバイスに画像を再作成する必要があります。を作成できない場合があることに注意してください。そのような場合は、のような別の実装VolatileImageにフォールバックする必要があります。ImageBufferedImage

于 2011-08-28T13:12:28.753 に答える