0

让我详细说明。我像这样定义一个 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);

我想要一种方法来创建随机数量的矩形和椭圆,并将它们存储在一个数组中,然后也可以绘制它们。我有一个函数可以返回一个从零到五的随机数。我希望能够使用该数字创建一个指向这些形状的数组,并遍历它们以将它们绘制到屏幕上。关于如何解决这个问题的任何想法?

4

1 回答 1

1

您可以通过以下两种方式之一来实现:

选项 1 - 创建 2 个分别包含 Rectangles 和 Ellipses 的数组。然后我们要选择一个随机形状来绘制,首先选择随机数组(选择是绘制椭圆还是矩形),然后从该数组中选择一个特定的矩形/椭圆。

选项 2 - 使用 OO 创建多态 Draw 函数。

// 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);
}
于 2010-12-17T23:06:48.063 回答