zoukankan      html  css  js  c++  java
  • Win10系列:VC++绘制几何图形5

    打开D2DBasicAnimation.h头文件,并在D2DBasicAnimation类中添加如下的代码:

    private:

        //声明成员变量point

        D2D1_POINT_2F point;

        //声明成员变量xVector

        float xVector;

        //声明成员变量yVector

        float yVector;

    在上面的代码中,使用private关键字声明了三个私有的成员变量point、xVector、yVector,其中point为D2D1_POINT_2F结构体的变量,xVector和yVector为float类型的变量,使用xVector变量表示在X轴上的移动向量,使用yVector变量表示在Y轴上的移动向量。

    声明了上述的变量以后,接下来打开D2DBasicAnimation.cpp源文件,在CreateDeviceResources函数中为xVector变量和yVector变量赋初始值。CreateDeviceResources函数的实现代码如下所示:

    void D2DBasicAnimation::CreateDeviceResources()

    {

        //调用DirectXBase类的CreateDeviceResources函数

        DirectXBase::CreateDeviceResources();

        //xVector变量和yVector变量赋初值

        xVector=1.0f;

        yVector =1.0f;

        //创建红色的画刷

        DX::ThrowIfFailed(

            d2dContext->CreateSolidColorBrush(

                D2D1::ColorF(D2D1::ColorF::Red),

                &redBrush

            )

        );

    }

    上面的代码中调用DirectXBase类的CreateDeviceResources函数,将xVector变量和yVector变量赋值为1.0f,并使用d2dContext指针所指向的对象的CreateSolidColorBrush函数创建一个红色的画刷对象,使用redBrush指针指向这个画刷对象。

    添加了上面的代码以后,接下来在D2DBasicAnimation.cpp源文件的Render函数中设置xVector变量值和yVector变量值的变换,实现圆形的移动,Render函数的实现代码如下所示:

    void D2DBasicAnimation::Render()

    {

        //调用BeginDraw函数开始绘图

        d2dContext->BeginDraw();

        //设置应用窗口的背景颜色

        d2dContext->Clear(D2D1::ColorF(D2D1::ColorF::Gray));

        //定义一个圆形

        D2D1_ELLIPSE ellipse = D2D1::Ellipse(D2D1::Point2F(100.0f, 100.0f), 100.0f, 100.0f);

        //设置point结构体变量的成员xy的值

        if(2*ellipse.point.x+point.x > window->Bounds.Width)

        {

            xVector=-1.0f;

        }

        else if(point.x<0)

        {

            xVector=1.0f;

        }

        if(2*ellipse.point.y+point.y > window->Bounds.Height)

        {

            yVector =-1.0f;

        }

        else if(point.y<0)

        {

            yVector=1.0f;

        }

        point.x+=xVector;

        point.y+=yVector;

        //得到平移矩阵

        D2D1::Matrix3x2F scale = D2D1::Matrix3x2F::Translation(point.x,point.y);

        d2dContext->SetTransform(scale);

        //绘制圆形

        d2dContext->FillEllipse(&ellipse,redBrush.Get());

        d2dContext->EndDraw();

    }

    在上面的代码中,首先调用d2dContext指针所指向的对象的BeginDraw函数开始绘制图形,并调用d2dContext指针所指向的对象的Clear函数将应用窗口的背景颜色设置为灰色。然后调用Ellipse函数得到一个D2D1_ELLIPSE结构体的变量ellipse,使用此结构体变量来表示一个圆形。接着设置xVector变量值和yVector变量值的变换,如果圆形碰到屏幕窗口的右边框或底部的边框时将xVector变量的值或yVector变量的值改变为-1.0f,而如果圆形碰到屏幕窗口的左边框或顶部的边框时,则将xVector变量的值或yVector变量的值改变为1.0f,用来避免圆形移动出屏幕窗口。接下来将point结构体变量的成员x加上xVector变量赋值给此结构体变量的成员x,并将point结构体变量的成员y加上yVector变量赋值给此结构体变量的成员y。

    接下来以point结构体变量的成员x和y作为参数调用Matrix3x2F类的Translation函数得到一个Matrix3x2F类的对象,并赋值给scale变量,接着以此变量作为参数调用d2dContext指针所指向的对象的SetTransform函数,从而改变红色圆形中点的坐标。然后调用d2dContext指针所指向的对象的FillEllipse函数使用redBrush指针指向的画刷对象填充ellipse结构体变量所定义的圆形区域。最后调用d2dContext指针所指向的对象的EndDraw函数结束图形的绘制操作。

    运行Direct2DDemo项目后,原本静止的圆形将会在应用窗口中移动。

  • 相关阅读:
    POJ 3114 Tarjan+Dijkstra
    278. First Bad Version
    209. Minimum Size Subarray Sum
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    710. Random Pick with Blacklist
    767. Reorganize String
    524. Longest Word in Dictionary through Deleting
    349. Intersection of Two Arrays
    350. Intersection of Two Arrays II
  • 原文地址:https://www.cnblogs.com/finehappy/p/6645593.html
Copyright © 2011-2022 走看看