2

正方形のタイルを使用して2Dゲームを作成しています。今度は、優れたマップエディターを作成します。

以前、DataGridViewを使用してみましたが、非常に遅いことがわかりました。

タイル(実際の画像または色付きの背景)とそのパラメーター(テキスト)を描画する別の方法があるはずだと思いました。PictureBox!

ピクセルの2D配列にアクセスしたり、目的の座標にタイル画像を挿入したり、ポインター座標などを取得したりする簡単な方法はありますか、それともまったく異なるアプローチを使用してみる必要がありますか?

4

1 に答える 1

5

コントロールのグリッドを使用すると、非常に遅くなります。タイルのグリッドを描画する「正しい」方法は、タイルのグリッドを描画することです。

画像またはインデックス/キーの配列を画像コンテナーに取り、それらを描画する独自のコントロールを作成できます。

UserControl ではなく Control からカスタム コントロールを派生させます (UserControl はコントロール コンテナーであり、必要ありません。または、スクロール バーが必要な場合は ScrollableControl から派生します)。OnPaint メソッドをオーバーライドして描画を実行します。OnPaint に渡された Graphics オブジェクトを使用します。これには、テキスト、プリミティブ、およびビットマップを描画するためのメソッドがあります。

MouseDown/Up をオーバーライドしてユーザー入力を処理するか、コンシューマーに処理させて HitTest メソッドを提供し、特定の X、Y をグリッド インデックスに変換できるようにすることができます。

ユーザー入力に応じて楕円を描画するための C# Drawing circles in a panel というコードがあります。そのコードから、コントロールに何らかの状態を描画する例を見ることができます (その場合のコントロールはフォームですが、カスタム コントロールに推定することができます)。ちらつきを除去するためのコンストラクターでの SetStyle 呼び出しに注意してください。また、状態を変更するときに再描画を試みるのではなく、再描画する必要があることを OS に伝えるだけの無効化を行うことに注意してください。

更新しました

始めるための非常に大雑把な例を次に示します: http://pastebin.com/DseuN56y

于 2012-04-10T16:45:29.080 に答える