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项目后,原本静止的圆形将会在应用窗口中移动。

  • 相关阅读:
    如何在myeclipse上使用git(码云)
    myeclipse使用git图文教程
    内存buffer转换为多维数组访问
    fd究竟是何方神圣
    getline c实现
    TLB初始化 Missing Handler,MIPS R3K mips_init_tlb
    Ubuntu 16.04 风扇特别响解决办法
    MySQL安装与卸载
    linux项目环境部署入门
    MySQL入门笔记一
  • 原文地址:https://www.cnblogs.com/finehappy/p/6645593.html
Copyright © 2011-2022 走看看