2DタイルベースのRPGゲーム用のマップエディターを作成していますが、障害が発生しています。問題は、実際には、300x300タイルなどの非常に大きなマップに対してグリッド線を効率的に描画する方法です。
もともと私は、マウスを動かしたりクリックしたりするたびにグリッドパネル全体を再描画するように呼びました(ドラッグしたり、ホバーしているタイルを強調表示したりできるため)。これは大きな地図にとってはひどいものであり、非常に遅かった。
したがって、私の解決策は、新しい空のマップが作成されたときに、指定されたサイズのグリッドのbufferedImageを作成し、paintが呼び出されるたびにその画像を再描画することでした。これは非常にうまく機能しましたが、200x200以上のJavaでは、bufferedImageの作成時にヒープスペースが不足する点が異なります。ユーザーが新しいマップを任意のサイズに指定できるはずなので、プリロードされた画像を実際に作成することはできません。また、グリッドをタイルの上に描画するのが好きです。そうしないと、タイルが線を覆い、乱雑に見えます。つまり、タイルが追加されるたびにグリッドを再度描画する必要がありますか?
私の質問は、マウスを動かすたびに再描画される非常に大きなグリッドを描画する別の方法はありますか?Tiledプログラムは、1000x1000以上のマップを簡単に作成できますが、どのように実行されますか?ありがとう
編集: タイルなどのグリッドコンテンツではなく、実際のグリッド線を意味します。現在、グリッドが描画されると、2D配列を繰り返し処理し、タイルのすべての長さで線を描画します。
編集: 画面の表示部分のみをペイントすることで機能するようになりました。JScrollPaneでビューペインの座標を見つけるのはそれほど難しくありません。:)