我在Visual Basic中使用更多手动绘制对象的方法,代码如下:
Dim g As Graphics = spritePanel.CreateGraphics
g.Clear(Color.Black)
Dim m As Matrix = New Matrix
m.RotateAt(45, New Point(currentSprite.Left + currentSprite.width / 2 + 16,
currentSprite.Top + currentSprite.height / 2 + 16))
g.Transform = m
g.DrawRectangle(New Pen(Brushes.Red, 3),
New Rectangle(currentSprite.Left - 2,
currentSprite.Top - 2, 35, 35))
问题是我正在尝试创建一个以更一般的方式执行m.rotateAt()方法的函数,因为计算中点并将其一遍又一遍地放入函数调用将变得乏味,而且我想要旋转多种类型的对象(图像,字符串,矩形,椭圆等)。我想像:
Public Function SpinObject(angle As Single, thing As Object) As Matrix
然而,对象显然没有.left / .top / .width / .height作为属性,所以即使我可以将任何内容传递给此函数,我实际上也无法访问计算矩阵所需的数据。我主要是在寻找像“DrawableObject”这样的东西。
归结为什么,我该如何创建这个功能?对于我想做的所有事情,我找不到一个共同的基类。我想我可以用
thing is typeof Rectangle
或类似我希望使用的每种类型,但我怀疑有更好的方法,但找不到它。
我对模板和泛型不是很熟悉,但我怀疑它们可能是解决方案的一部分。
答案 0 :(得分:2)
为要使用的每个对象创建一个类 - 这些都是从基类继承的 - 这样您可以让方法或集合使用这些对象中的任何一个,基类使用Sub例程实现一个接口{{1采用角度参数。现在,该函数可以接受任何这些对象,然后根据内部方法Rotate
要求每个对象进行旋转,该方法处理所讨论的对象以及旋转对象的特定方式。您甚至可以将图形对象传递给它,这非常简单。
Rotate