2012-04-10 8 views
2

私は正方形のタイルで2次元ゲームを作っています。2dタイルエディタをピクチャボックスや同様のコントロールで作成する

私はDataGridViewを使用しようとしましたが、それはsuperslowであることが判明しました。

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

ピクセルの2次元配列に簡単にアクセスしたり、希望の座標にタイル画像を挿入したり、ポインタ座標を取得したり、全く異なるアプローチを試す必要がありますか?

+0

は、マップに画像を変換に関する有用な記事もあります[リンク](http://stackoverflow.com/q/10127871/1306322) – user1306322

答えて

5

コントロールのグリッドを使用すると、スローされます。タイルのグリッドを描画する「正しい」方法は、タイルのグリッドを描画することです。

イメージまたはインデックス/キーの配列をイメージコンテナに入れてペイントする独自のコントロールを作成できます。

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

MouseDown/Upをオーバーライドするか、消費者にそれを処理させるが、与えられたX、Yをグリッドインデックスに変換できるようにHitTestメソッドを提供することができます。

ここでは、ユーザーの入力に応じて省略記号を描くためのC# Drawing circles in a panelというコードがあります。そのコードから、コントロール上の状態をペイントする例を見ることができます(その場合のコントロールはフォームですが、カスタムコントロールに推論することもできます)。フリッカーを削除するためのコンストラクタのSetStyle呼び出しに注目してください。また、状態を変更したときに再描画を試みるのではなく、単に無効化するだけで、OSに再描画が必要であることが通知されます。

を更新しました

は、ここであなたが始めるために極めて粗製の例です: http://pastebin.com/DseuN56y

+0

私はホイップアップした例へのリンクを追加しました。 – Tergiver

+0

驚くばかり!ありがとう、これは私が想像したように見えます。 – user1306322

関連する問題