2017-04-15 73 views
0

我正在使用WPF來製作一個使用XAML和C#的小型物理引擎。兩種不同對象類型的多維數組

我想繪製矩形到窗體上,並基於鼠標輸入應用基本的物理運動。在該程序中,有一個Shape類,其中包含重力值,鼠標速度和質量等屬性。

我需要將這些屬性值應用到矩形圖上,所以我創建了Shape類的對象來調用這些屬性。但是,我將有多個矩形,所以我需要一個方法來識別矩形,以便我可以將這些重力/速度/質量值應用到每個單獨的矩形。我一直在尋找方法來做到這一點,Union of two array of two different Objects,除了我不確定這是我在找什麼。

下面是包含物理值(重力,速度,質量)

namespace Shapes 
{ 
    public class Shapee 
    { 
     int _count; 
     Physics_Engine.MainWindow _parent; 

     public Shapee(int clickcount, Physics_Engine.MainWindow parent) 
     { 
      _parent = parent; 
      _count = clickcount; 
     } 

     public double Mass { get; set; } 
     public double Velocity { get; set; } 
    } 
} 

以我主類的類,我已經從這個類創建的對象的陣列,並且還繪製矩形。

public partial class MainWindow : Window 
{ 
    public double boxvalue; 
    public const int MAXSHAPES = 20; 

    Shapee[,] shapes = new Shapee[MAXSHAPES, MAXSHAPES]; 

    public int addshapeclickcount = 0; 

    //Start 
    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     addshapeclickcount++; 
     Debug.WriteLine(addshapeclickcount); 

     if (addshapeclickcount < 20 && addshapeclickcount != 20) 
     { 
      //Draw rectangle 
      var rect = new System.Windows.Shapes.Rectangle() 
      { 
       Stroke = new SolidColorBrush(Colors.Black), 
       Fill = new SolidColorBrush(Colors.Black), 
       StrokeThickness = 2, 
       Width = 20, 
       Height = 20 
      }; 
      Canvas.SetLeft(rect, 2); 
      Canvas.SetTop(rect, 6); 
      Draw.Children.Add(rect); 

      //Create shape object 
      var shape = new Shapee(addshapeclickcount, this); 
      shapes[addshapeclickcount] = shape; //Create new shape every button click 
     } 
     else 
     { 
      MessageBox.Show("  Max Shapes Reached"); 
     } 
    } 
} 

如何將能夠將這些這兩個對象在一個數組鏈接,這樣我可以分配式樣質量和速度值,以每個矩形對象的座標值?

+0

您需要簡化您的示例,並使其完成(請參閱[mcve]),以適合堆棧溢出的方式呈現您的問題。事實上,你的問題太廣泛了......有太多不同的方法來解釋你的關注,而不用回答它。這就是說,看起來你做的「全部錯誤」。你的整個物理模擬應該獨立於用戶界面,這樣所有的交互都可以用你的用戶定義的對象完成。然後,您應該在描述視覺方面的用戶定義對象中包含屬性,並將這些屬性綁定到XAML。 –

回答

1

你確定這條線是正確的嗎?

shapes[addshapeclickcount] =shape; //Create new shape every button click 

我認爲你可以使用字典的對象鏈接(以保持清潔你Shappe類):

Dictionary<Shapee, System.Windows.Shapes.Rectangle> links = new Dictionary<Shapee, System.Windows.Shapes.Rectangle>(); 

而且這每一個創造後,對象可以通過鏈接:

links.Add(shape, rect);