作成しているコンピューターゲームにハードウェアカーソルを使用したいのですが、AWTを使用すると、使用する画像を指定できますが、2色と透明度しか受け入れられないため、かなり制限があります。
現在のほとんどのシステムでより大きな色深度を使用できることはかなり確信していますが、AWTでそれを実現する方法はありますか?他の方法はどうですか?
画像への描画は私にはうまくいきませんでした。
通常どおりに画像が読み込まれ、次のようになります。
Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(bufferedImage, new Point(0,0), "transparent");
Graphics graphics = bufferedImage.getGraphics();
graphics.drawImage(image, 0,0, null);
frame.setCursor(cursor);
ツールキットの2色の制限はまだあります:(
Toolkit.getMaximumCursorColorsを呼び出し、それが最大2を返す場合、AWTがカーソルをレンダリングするために使用するのはそれだけです。これを回避するには、完全に透明な画像を作成し、それをカーソルとして設定します。次に、ゲームのペイントに使用しているコンポーネントにMouseListenerを追加し、現在のマウス座標で必要なカーソル画像を描画またはペイントします。
私のAWTの記憶はややむらがありますが、必ずしもハードウェアカーソルを変更できるとは限りません。むしろ、カスタムカーソルを定義でき、カーソルの変更方法を決定するのは特定のツールキット実装(java.awt.Toolkitのサブタイプ)次第です。
同様に、マルチカラーカーソルはAPIレベルでサポートされていますが、特定のツールキットを使用してサポートされていない場合があります。システムのツールキットオブジェクトを取得して、getMaximumCursorColors()を呼び出すことをお勧めします。数が十分に多くない場合、Javaを介してそれをバイパスする方法があるかどうかはわかりません。