两个不同对象类型的多维数组

时间:2017-04-15 16:29:55

标签: c# arrays wpf class xaml

我正在使用WPF使用XAML和C#创建一个小型物理引擎。

我想在表格上绘制矩形,并根据鼠标输入对它们应用基本的物理运动。在程序中,有一个Shape类,它包含重力值,鼠标速度和质量等属性。

我需要将这些属性值应用到矩形图上,因此我从Shape类创建了对象以调用这些属性。但是,我将有多个矩形,所以我需要一个ID矩形的方法,所以我可以将这些重力/速度/质量值应用于每个单独的矩形。我已经找到了办法,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");
        }
    }
}

我如何能够将这两个对象链接到一个数组中,以便将Shape质量和速度值分配给每个矩形对象的坐标值?

1 个答案:

答案 0 :(得分: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);