打开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结构体变量的成员x和y的值

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

最新文章

  1. Linux下安装Nginx服务器
  2. HDU 1796 How many integers can you find 容斥入门
  3. 剑指Offer20 栈的压入弹出序列是否正确
  4. 制作下拉菜单(PopupList)
  5. JDBC连接池以及动态SQL处理
  6. segv &amp; mini coredump
  7. 纯css实现三角形
  8. 真实世界里的钢铁侠-特斯拉汽车创始人埃隆&amp;#183;马斯克(Elon Musk)
  9. appium元素定位及操作
  10. Chrome不支持本地Ajax请求,解决办法
  11. spring cloud(学习笔记)微服务启动错误(1)
  12. Shiro入门 - md5+salt测试
  13. Selenium上传文件方法总结
  14. python中的apscheduler模块
  15. nginx面试中最常见的18道题
  16. Windows Phone本地数据库(SQLCE):6、[Index] attribute(翻译)(转)
  17. Hibernate4获得Session
  18. BT601. BT709色彩空间
  19. 让自己的程序支持livewriter
  20. ubuntu16更新源

热门文章

  1. OpenModelica部分库缺失问题解决
  2. indexOf includes 区别
  3. Ubuntu 追加组,用户,设置免sudo密码输入
  4. 异常上报工具:腾讯Bugly
  5. nginx反向代理实例
  6. SQL语句内做除法得出百分比
  7. compile FFMPEG under windows
  8. delphi 程 序从exe运行改成dll库
  9. Mac必备神器之Go2Shell
  10. Being a Good Boy in Spring Festival HDU - 1850