2012-03-26 2 views
4

В моей «игре» я нарисую небольшую карту (т. Е. Поля 10x10). Каждое поле будет представлять собой стену или землю. В зависимости от ответов на этот вопрос, плитки будут либо PNG-изображениями, либо простыми цветными прямоугольниками.Простейший способ рисовать плитки-карту в WPF

Ваш best Рекомендуемый способ нарисовать такую ​​карту в WPF? Я хочу, чтобы он был настолько простым, насколько это возможно, потому что часть GUI этого проекта не очень важна, я просто хочу, чтобы она отображалась в центре окна.

Идеи, которые у меня есть:

  • Canvas + размещение нескольких Rectangle сек как дети
  • Bitmap вынесенного двигателя, выводимые GUI
  • внешней библиотеки?
+0

как вы определяете «лучшее»? Простота программирования, производительность, использование памяти, CPU ...? –

+0

Простота программирования важна – emesx

ответ

5

WPF не так склонен к чертежу как Windows Forms есть. WPF более ориентирован на контент.

Лучший способ «нарисовать» что-то - создать карту из существующих элементов WPF. Например, вы можете использовать Grid или UniformGrid или даже Canvas для размещения вашего контента. Вы можете программно добавить Image s и Rectangle s к карте, не беспокоясь ни о каком чертежном коде.

Вот пример:

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 выложить TextBlock с, Line с и Button с. Это эффективно и просто, намного больше, чем я ожидал.

+0

См. Комментарии, такие как это именно то, что мне нужно. У меня не так много опыта работы в WPF, я код в основном в Java .. ;-) – emesx

+0

Отсканированный фрагмент, показывающий, как рисовать сетку 10x10, отображаемую в самой середине «холста», было бы очень приятно увидеть ;-) – emesx

0

Я бы сказал, что использовать XAML, если пользовательский интерфейс прост и вы ищете простоту программирования, вы можете использовать встроенный конструктор XMAL в VS или Blend для рисования пользовательского интерфейса. Другие варианты - использовать DirectX или OpenGL, которые намного мощнее, но имеют крутую кривую обучения.

+0

карта не является статической – emesx

+0

, даже если карта не является статической, вы можете создать структуру в XAML и связать элементы карты. –

+0

очень хорошая идея! К сожалению, размер не является статичным. Представьте себе карту мира в игре. – emesx

Смежные вопросы