2012-03-26 15 views
4

私の "ゲーム"では小さなマップ(つまり10x10のフィールド)を描画します。各フィールドは壁または地面を表します。この質問に対する回答に応じて、タイルはPNG画像または単純な色で塗りつぶされた長方形になります。WPFでタイルマップを描画する最も簡単な方法

あなたのは何ですか?このようなマップをWPFで描画するにはどうすればよいでしょうか?私はそれがのように簡単にであることを望んでいます、このプロジェクトのGUI部分はあまり重要ではないので、私はそれをウィンドウの中央に表示したいと思います。私が持っている

アイデア:GUI

  • 外部ライブラリで表示エンジンによってレンダリング子ども
  • ビットマップとして、複数のRectangle Sを置く+

    • Canvas
  • +0

    "ベスト"をどのように定義しますか?プログラミング、パフォーマンス、メモリの使いやすさ、CPUの容易さ...? –

    +0

    プログラミングの容易さが最も重要 – emesx

    答えて

    5

    WPFはWindowsフォームと同様に図面に傾いていません。 WPFはよりコンテンツ指向です。

    「描画する」最も良い方法は、既存のWPF要素からマップを生成することです。たとえば、GridまたはUniformGrid、さらにはCanvasを使用してコンテンツをレイアウトすることができます。描画コードを気にすることなく、ImageRectangleをプログラムで追加することができます。ここで

    は一例です:

    UniformGrid grid = new UniformGrid(); 
    grid.Columns = 10; 
    grid.Rows = 10; 
    grid.Width = columnWidth * 10; 
    grid.Height = rowHeight * 10; 
    for (int x = 0; x < 10; x++) 
    { 
        for (int y = 0; y < 10; y++) 
        { 
         if (fields[x, y] is SomeImage) 
         { 
          Image img = new Image(); 
          img.Source = someImageSource; 
          grid.Children.Add(img); 
         } 
         else 
         { 
          Rectangle rect = new Rectangle(); 
          rect.Fill = someColor; 
          grid.Children.Add(rect); 
         } 
        } 
    } 
    Canvas.SetLeft(grid, (canvas.Width - grid.Width)/2); 
    Canvas.SetTop(grid, (canvas.Height - grid.Height)/2); 
    canvas.Children.Add(grid); 
    

    あなたはおそらくされていることを使用することはできませんが、あなたが欠けている部分を埋めることができます。

    最近、私はCanvasを使ってTextBlocks、LinesおよびButtonsをレイアウトするプロジェクトをこれに似ていました。効率的でシンプルで、私が期待していた以上に多くのことをしています。

    +0

    参照してください、このようなコメントは私が必要とするものです。私はWPFで多くの経験を持っていません。私はほとんどJavaで記述しています。;-) – emesx

    +0

    10月10日のグリッドを描画する方法を示すスニペットは、 'Canvas'の真ん中に表示されています。 – emesx

    0

    UIがシンプルで、プログラミングの容易さを望んでいるのであれば、XMALビルトインデザイナをVSまたはBlendで使用してUIを描画できます。他のオプションは、はるかに強力ですが、急な学習曲線を持ってDirectXまたはOpenGLを使用することです。

    +0

    マップが静的でない場合 – emesx

    +0

    マップが静的でない場合でも、XAMLで構造を作成してマップの要素をバインドすることができます。 –

    +0

    非常に良いアイデア!残念ながら、サイズは静的ではありません。ゲームの世界の地図を想像してください。 – emesx

    関連する問題