让我解释。 我定义了一个矩形D2D像这样:
D2D1_RECT_F rect1 = D2D1::RectF(5, 0, 150, 150);
和椭圆形为:
D2D1_ELLIPSE ellipse1 = D2D1::Ellipse(D2D1::Point2F(75.f, 75.f), 75.f, 75.f);
要绘制这些形状,我第一次变换并将其传递给渲染目标:
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(200, 50)));
m_pRenderTarget->FillRectangle(&rect1, m_pLinearGradientBrush);
我想一个方法来创建矩形和椭圆的一个随机数,并将其存储在一个数组,然后才能够吸引他们。 我有一个返回一个随机数从0到5的功能。 我希望能够用这个数字来创建一个指向这些形状的阵列,并遍历它们,将它们绘制到屏幕上。 我如何能解决这个问题的任何想法?
你可以做到这一点是有2种方法之一:
选项1 - 创建包含分别矩形和椭圆2个阵列。 然后,我们要选择一个随机的形状画,你先挑随机阵列(选择是否绘制椭圆或矩形),然后选择从该数组中的特定矩形/椭圆形。
选项2 - 使用OO创建一个多态绘图功能。
// Define new base class for your shapes
class DrawableShape
{
HRESULT DrawMe(ID2D1RenderTarget* pUseThisRT);
};
// Create a MyD2DEllipse class implementing DrawableShape
class MyD2DEllipse : public D2D1_RECT_F, public DrawableShape
{
HRESULT DrawMe(... pUseThisRT)
{
pUseThisRT->FillEllipse(this, ...);
}
};
// Similarly create MyD2DRectangle
class MyD2DRectangle : ..
{
...
};
然后,您可以创建数组DrawableShape[]
从中可以从随机选择。
void DrawRandomShape(DrawableShape* shapes[])
{
shapes[rand()]->DrawMe(pUseThisRT);
}
文章来源: How can I create a random number of D2D shapes (rectangles and ellipses) and refer to them as an array while drawing?