2

我正在使用 WPF 和 C#,并且我有一个带有矩形的画布(就像一个迷宫)。现在我想创建一个在这个迷宫中移动(在算法的帮助下)的角色。因此,我创建了一个名为 character 的新类,但我的问题从这里开始:如何在画布上创建一个对象,该对象具有图像、位置并且可以访问角色类中的方法和属性?所以最后的事情应该是这样的:

private class MainWindow
{

   //Here the canvas is made visible and the rectangles are being drawn on the canvas

   //Then a method should start to create the character and move him through the maze

   //it should look like (character.move(1) so the character moves one step forward etc.)

}

private class Character
{
//here are the methods and attributes the character should have
}

提前感谢,对不起我的英语不好:)

4

2 回答 2

3

如果你从相反的方向看问题,解决起来会容易得多。

创建您的角色对象,将其连接起来,以便一切都按照您在数据(模型)中的预期工作。然后,您需要添加表示角色位置的属性,例如

public int XCoordinate { get; set; }
public int YCoordinate { get; set; }

确保移动是在模型端完成的。如果你试图根据视觉显示来驱动运动,它会使程序过于复杂。

接下来,在画布中定义角色的视图,如下所示:

<Canvas ...>
    <Image Canvas.Left="{Binding XCoordinate}" Canvas.Top="{Binding YCoordinate}" .../>
</Canvas>

最后,确保您的绑定语法是正确的(您是否设置了 DataContext?)并确保设置 NotifyPropertyChanged 以适应口味(这两者在其他地方都有很好的介绍)。然后,您将设置一个整齐划分的模型和视图,并且应该更容易专注于运动逻辑或您想要的任何其他内容。

于 2012-11-02T20:58:11.887 回答
1

第一步是定义Character类的属性和方法。这将包括(正如您在问题中指出的那样)一种Move(Position newPosition)方法。Position可以是Point结构的包装器。该类Character还需要包含对存在角色的 Canvas 的引用。这是必需的,因为当您调用 'character.Move(position)` 时,可以在角色当前关联的画布中移动角色。

此外,MainWindow可以包含对字符或字符集合的引用(以防您需要多个字符)。实际的创建可以是在初始化期间,MainWindow也可以是惰性的。初始化后,您的算法可以在字符实例上工作。

于 2012-11-02T23:14:28.480 回答