让我详细说明一下。我像这样定义一个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);
要绘制这些形状,我首先将它们转换并将它们传递给rendertarget:
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(200, 50)));
m_pRenderTarget->FillRectangle(&rect1, m_pLinearGradientBrush);
我想要一种方法来创建随机数量的矩形和椭圆,并将它们存储在一个数组中,然后也可以绘制它们。我有一个函数,返回从0到5的随机数。我希望能够使用该数字创建一个指向这些形状的数组,并迭代它们以将它们绘制到屏幕上。关于如何处理这个问题的任何想法?
答案 0 :(得分:1)
你可以实现这两种方式之一:
选项1 - 分别创建包含矩形和椭圆的2个数组。然后我们要选择一个随机形状来绘制,首先选择随机数组(选择是否绘制椭圆或矩形),然后从该数组中选择一个特定的矩形/椭圆。
选项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);
}