在VB.net中一般旋转对象

时间:2014-04-30 23:48:50

标签: vb.net generics drawing system.drawing

我在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

或类似我希望使用的每种类型,但我怀疑有更好的方法,但找不到它。

我对模板和泛型不是很熟悉,但我怀疑它们可能是解决方案的一部分。

1 个答案:

答案 0 :(得分:2)

为要使用的每个对象创建一个类 - 这些都是从基类继承的 - 这样您可以让方法或集合使用这些对象中的任何一个,基类使用Sub例程实现一个接口{{1采用角度参数。现在,该函数可以接受任何这些对象,然后根据内部方法Rotate要求每个对象进行旋转,该方法处理所讨论的对象以及旋转对象的特定方式。您甚至可以将图形对象传递给它,这非常简单。

Rotate