Directx9学习(七)初识texture(2)
来源:互联网 发布:企业vpn网络解决方案 编辑:程序博客网 时间:2024/05/18 14:46
2017.08.30
今天感受一下利用sprite来画序列帧。
由于Sprite可以定义图像的源矩形,也就是可以在屏幕上画这个图像的任何一部分,所以这就可以画序列帧。
需要的参数:整个图片texture的长宽,这整个图片一共多少列多少行(图片帧个数,横行竖列),每一个图片帧的长宽,图片帧更新间隔
首先需要计算需要绘制的图片帧的矩形:(图片帧的Index从0开始)
(int)left = (当前图片帧的Index % 总列数) * 每帧图片宽度
(int)top = (当前图片帧的Index / 总列数) * 每帧图片高度
right = left + 每帧图片宽度
bottom = top + 每帧图片高度
这样就能根据Index来绘制不同位置的图片了
每帧图片的长宽(我这边是8*8 = 64帧 的一个图片):
HRESULT result = D3DXGetImageInfoFromFile(fileName.c_str(), &info);frame_w = info.Width / 8;frame_h = info.Height / 8;
利用Windows.h中自带的GetTickCount()计时(返回毫秒ms)来更新所绘制的帧的Index ,其中传了两个引用,分别是帧的Index和总时间,delay是多少毫秒后更新帧,direction是一次更新多少帧
void SpriteAnim(int & frame, int startframe, int endframe, int direction, int & starttime, int delay){if ((int)GetTickCount() > starttime + delay){//计时 如果经过的时间大于delay 那么更新这个starttime和帧(+或者-|direction|个帧)// GetTickCount() 返回毫秒msstarttime = GetTickCount();frame += direction;//防止加和减越界if (frame > endframe)frame = startframe;if (frame < startframe)frame = endframe;}}
然后利用Sprite的可以绘制任意区域的特性画图:
void SpriteDrawFrame(LPDIRECT3DTEXTURE9 tex, int destx, int desty, int framenum, int framew, int frameh, int columns) //最后一个参数是列数{//在窗口中的位置D3DXVECTOR3 vecPos((float)destx, (float)desty, 0.0f);D3DCOLOR white = D3DCOLOR_XRGB(255, 255, 255);RECT rect;rect.left = (framenum % columns) * framew;rect.top = (framenum / columns) * frameh;rect.right = rect.left + framew;rect.bottom = rect.top + frameh;
//将整个texture的rect部分画在窗口中的vecPos处,这个图片左上角的位置就在vecPossprite->Draw(tex, &rect, NULL, &vecPos, white);}
总的调用顺序:
if (d3ddev->BeginScene()){sprite->Begin(D3DXSPRITE_ALPHABLEND); //锁住Sprite并开始绘制//从第0帧开始到63帧(共64帧),每次加一帧,30ms更新一次
SpriteAnim(frameIndex, 0, 63, 1, startTime, 30);
//在512,384的位置画第frameIndex帧,长和宽,共八列
SpriteDrawFrame(texture, 512, 384, frameIndex, frame_w, frame_h, 8);sprite->End();d3ddev->EndScene();d3ddev->Present(NULL, NULL, NULL, NULL); //交换后台到前台}
总结:
1.LPD3DXSPRITE :处理sprite对象的指针
2.D3DXCreateTextureFromFileEx 从文件加载到纹理
3.D3DXCreateSprite 创建sprite对象,让指针指向某个sprite
4.画Sprite: spriteobj->Draw
5.Texture对象指针:LPDIRECT3DTEXTURE9
6.D3DXGetImageInfoFromFile 返回这个图像文件的信息
7.spriteobj->Begin() 和 spriteobj->End() 绘图期间锁住和解锁Sprite
阅读全文
0 0
- Directx9学习(七)初识texture(2)
- Directx9学习(七)初识texture(1)
- Directx9学习(八)初识texture(3)
- 深入Managed DirectX9(七)
- 深入Managed DirectX9(七)
- DirectX9学习(一)
- DirectX9学习(二)
- Directx9学习(五)输入
- DirectX9.0学习(二):Direct3D基础
- DirectX9学习(四)装载位图
- Directx9学习(六)第一个小游戏
- DirectX9.0 开发学习(一):向量几何基础知识
- 翻译 managed DirectX9(第一章)
- managed DirectX9(第二章)
- 深入Managed DirectX9(二)
- 深入Managed DirectX9(三)
- 深入Managed DirectX9(四)
- 深入Managed DirectX9(五)
- 卷积神经网络CNN-目标探测
- XZ_JavaScript之JavaScript的基本语法
- Google正面迎战苹果,用ARCore阻击ARKit
- 【NOIP·TG2004】caioj1065·动态规划入门(一维一边推3:合唱队形)
- Html5的缓存小结(原)
- Directx9学习(七)初识texture(2)
- [标题党]15分钟开发可支持百万观众的H5视频直播网站
- html 中如何让鼠标箭头移到某个区域(div,input,a等标签)上就变为手型,移出后再变为原型。
- SQL垂直拆分和水平拆分
- python时间和时间戳之间的相互转换
- f'da's
- MATH类
- tar.xz 格式文件解压, CentOS 和 MacOS对比
- centos编译apr-util-1.6.0出错 缺少expat.h