语言:C++编辑器:VS2015渲染:D2D碰撞:obb和aabb编译选项:请选择Release x86 编译
img 放游戏所使用的图片文件夹frame 放控制游戏场景相关的文件instance 放游戏窗口进程 游戏循环 工具类 碰撞类的文件render 放游戏渲染引擎的文件夹trigger 放对一些消息进行映射的文件夹
文件夹介绍 目录截图:
项目运行截图:
这是我们要做的目标:
帧:在一个动画里面我们把每个画面叫做帧
动画:一个连续不间断的帧就是一个动画(这里可以理解到后面封装动画精灵的时候会用到)
帧的间隔:两个帧之间的间隔就表示一个帧的间隔 我们游戏里面的帧的间隔为1000/60ms即我们游戏所用到的帧为一秒60帧
为什么取这个值:
因为人眼看到的最大帧就是60帧再大也是和这个帧一样
开发公司:微软
主要功能:通过调用gpu实现的非常快的图形渲染相对于gdi与gdi+来说d2d的渲染是非常快的
ID2D1Factory * m_fac;
提供:
创建渲染目标类方法(可以是窗口为渲染目标,位图为渲染目标) CreateHwndRenderTarget
创建边框样式类方法 (让绘制的路径是虚线还是实线) CreateStrokeStyle
创建路径绘制类方法(绘制圆形,矩形,椭圆,不规则形状) CreatePathGeometry,CreateEllipseGeometry
ID2D1HwndRenderTarget * m_render
提供各种绘制方法的一个类
绘制不规则路径的方法 (DrawGeometry)
填充不规则路径的方法(FillGeometry)
开始绘制 (BeginDraw)
结束绘制 (EndDraw)
填充矩形(FillRectangle)
设置变换 (SetTransform)
创建位图 (CreateBitmapFromWicBitmap)
绘制位图 (DrawBitmap)
创建位图画刷 (CreateBitmapBrush)
绘制文字 (DrawText)
ID2D1SolidColorBrush * pen
一切画线的方法都会用到这个画刷
在封装中用到的方法:
content::drawText 绘制文本
content::stroke 将我们的beginPath和closePath的路径绘制为不规则图形
content::strokeStyle 设置绘制的颜色
content::drawArc 绘制没有背景颜色的圆形
content::drawLine 绘制一根线条
ID2D1SolidColorBrush * brush
在封装中用到的方法:
content::fill() 将我们的beginPath和closePath的路径填充为有背景颜色的不规则图形
content::fillStyle() 设置填充的颜色
content::fillRect() 填充矩形
content::fillArc() 填充圆形
ID2D1BitmapBrush * bitmapBrush
在封装中用到的方法:
content::fillImage 填充背景 这里主要是绘制重复的背景用的
IWICImagingFactory * m_imgFac;
提供读取图像的方法(这里只是将图片读取了还不是能用的位图) CreateDecoderFromFilename
我们需要对读取的内容进行转码具体看下面代码
content.cpp
IDWriteFactory * m_writeFac;
提供创建文字绘制对象的方法 CreateTextFormat
IDWriteTextFormat * m_forMat
这个类主要用于绘制文字的字体和大小
在我们的封装里面主要用于
content::drawText
我们这里就不详细介绍direct2d的各种api了因为api(提供程序调用的方法)估计得有好几千个
我们这里就说一下这个捕鱼游戏需要的渲染工具(即这个程序用到的direct2D对象)
1.图片绘制方法 content::drawImage
思路:这里我们重写了多种参数但是最主要的目的还是要让图片通过一个路径直接绘制出来
我们的getSource方法会将传入的参数进行缓存起来 当下一次调用的时候就不需要再去调用com组件来处理图片了
核心方法: content.cpp
2.重复图形绘制方法 content::fillImage
思路:这里我们在填充矩形的时候通过调用位图画刷进行绘制这样就会填充多个图片了
核心方法:content.cpp
setExtendmodeX是设置x轴的填充重复模式
setExtendmodeY是设置y轴的填充重复模式
3.获取图片资源方法 content::getSoucre
思路:这里我们通过两个数组 一个位图vector另一个string vector进行缓存
我们先检索string里面是否有重复的 如果有我们就直接返回缓存的位图资源 如果没有我们就加载并且将加载好的存在数组里面
核心方法:
content.cpp
4.绘制文字的方法 content::drawText //
思路:我们通过非常简单的传入文字和坐标就绘制文字
核心代码:content.cpp
5.获取文字宽度与高度的方法 content::getTextInfo
思路:通过传入的字符串将当前绘制环境的字符串绘制宽度与高度缓存到第二个参数里面
核心代码:content.cpp
6.变换相关的方法
content::rotate(int angle,int x =0,int y = 0); //提供旋转变换的方法
content::scale(int zoom, int x = 0, int y = 0);//提供缩放变换的方法
content::skew(int angleX, int angleY, int x = 0, int y = 0);//提供扭曲(倾斜)变换的方法
content::trisition(int x, int y);//提供位移变换的方法
content::save();//将上一次变换的变换矩阵保存到内存中
content::restore();//将上一次变换的变换矩阵重新放出来渲染
<< · Back Index ·>>