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结构体变量的成员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项目后,原本静止的圆形将会在应用窗口中移动。
Win10系列:VC++绘制几何图形5的更多相关文章
- Win10系列:VC++绘制几何图形2
新建了Direct2D中的资源后,接下来初始化用于绘制图形的应用窗口.在解决方案资源管理器窗口中右键点击项目图标,在弹出的菜单栏中选中"添加", 并在"添加"的 ...
- Win10系列:VC++绘制几何图形1
本小节主要介绍如何使用Direct2D来绘制几何图形,其中会使用到FillGeometry函数和FillEllipse函数,FillGeometry函数用于填充几何图形的内部区域,而FillEllip ...
- Win10系列:VC++绘制几何图形4
三角形绘制完成以后,接下来介绍如何给项目添加主入口函数.打开D2DBasicAnimation.h头文件,添加如下的代码定义一个DirectXAppSource类. //定义类DirectXAppSo ...
- Win10系列:VC++绘制几何图形3
在绘制三角形之前,首先需要创建一个三角形,打开D2DBasicAnimation.h头文件,在D2DBasicAnimation类中添加如下的代码: private: //声明成员变量obje ...
- Cocos2D中使用CCDrawNode绘制几何图形崩溃的解决
在cocos2D v3.x中已经不能像在v2.x中那样直接调用ccDrawXXX函数来绘制几何图形了. 我们可以使用CCDrawNode或者CCRenderer来绘制图形. 但是官方的Api手册中说的 ...
- Win10系列:C#应用控件进阶9
RectangleGeometry 在使用RectangleGeometry控件绘制矩形时,矩形的位置和尺寸由Rect属性定义,该属性指定矩形的相对位置.高度和宽度.Rect有四个参数,前两个参数表示 ...
- Win10系列:C#应用控件进阶6
路径 路径(Path)可以用来定义任意形状的曲线和几何图形,当然这种任意性也带来了复杂性.为了方便的绘制几何图形,微软在Visual Studio 2012安装包中为程序开发者提供了免费的Blend ...
- Win10系列:C#应用控件进阶7
PathGeometry 前面介绍了Path的使用方法,接下来介绍PathGeometry类.PathGeometry提供了描绘由弧线.曲线和直线组成的多个复杂图形的方法.PathGeometry的核 ...
- HTML5绘制几何图形
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
随机推荐
- VC.窗口最前(置顶)
1.Delphi7的代码 procedure TfrmMain.cbWndTopmostClick(Sender: TObject); var liExStyle :LongInt; begin // ...
- python特殊成员函数
1.__init__():构造函数 2.__del__():析构函数 3.print(__doc__):打印描述信息 4.print(Dog.__module__):类来自的模块 5.print(d1 ...
- ios手机域名https协议注意事项
加载网页版链接框架不能用http 1.下载到本地 2.转换为cdn https
- Angular 学习笔记 ( timezone + moment + material date-picker + date pipe + asp.net core )
参考 : https://stackoverflow.com/questions/29979609/time-conversion-with-timezoneinfo-for-past-years h ...
- 怎样在winform中上传图片
http://jingyan.baidu.com/article/b7001fe157d6b60e7382dd7f.html 因为WinForm都是运行在本地的,而我们的网站一般都是布署在服务器上,运 ...
- 用where导致group by分组字段的索引失效
把两个单独的索引合并成一个组合索引,即把where条件字段的索引和group by的分组字段索引组合成一个. 如果分组的字段需要用函数处理,可以用索引函数 Generated Column(函数索引) ...
- SQL SERVER 字符合并多行为一列
[字符合并多行为一列] 思路1:行转列,在与字符拼接(适用每组列数名相同) 思路2:转xml,去掉多余字符(适用所有) 假设兴趣表Hobbys Name Hobby 小张 打篮球 小张 踢足球 Nam ...
- 『Re』正则表达式模块_常用方法记录
『Re』知识工程作业_主体识别 一个比较完备的正则表达式介绍 几个基础函数 re.compile(pattern, flags=0) 将正则表达式模式编译成一个正则表达式对象,它可以用于匹配使用它的m ...
- python-django rest framework框架之路由
路由 第一类:原始继承APIView # http://127.0.0.1:8000/api/v1/auth/ url(r'^auth/$', views.AuthView.as_view()), # ...
- js 异步加载
document 加载 document.write("<scr" + "ipt src=\"js/jquery.js\"></sc ...