DirectDraw关于blt的一些注意事项
blt函数是位块传输的意思,一般用作从一个页面拷贝到另外一个页面。还有的用法就是使用单色填充页面。 只要将ddbltfx的 fillcolor使其有效。
使用这个函数的时候注意三点:
使用函数前,最好要将页面初始化。假设你编写一个动画程序的时候,如果你不在每次的blt之前将页面初始化,你的动画角色,将在页面上一直存在,就是要擦出动画的前一步的blt。
使用这个函数时一定不能在lock与unlock 之间 调用,否则报错。返回值信息是 DDERR_SURFACEBUSY ,意味着调用blt的函数的页面,已经被锁定。 只有在解锁之后,才能调用该函数。
LPDIRECTDRAWSURFACE7 lpDDBitmap;
if(!CreateBitmapSurface(&lpDDBitmap,"monster.bmp",640,480))
{
ErrorAndClear("load bitmap error");
return 0;
}
DDCOLORKEY srcckey;
srcckey.dwColorSpaceHighValue=0;
srcckey.dwColorSpaceLowValue=0;
lpDDBitmap->SetColorKey(DDCKEY_SRCBLT,&srcckey);
RECT src_rect[6]={{2,2,70,80},
{2+75,2,140,80},
{2+145,2,215,80},
{2+220,2,290,80},
{2, 82,70,160},
{2+75,82,145,160}
};
static int num_rect=0,num_speed=0;
RECT dest_rect;
dest_rect.left=num_speed*30;
dest_rect.top=0;
dest_rect.right=dest_rect.left+200;
dest_rect.bottom=400;
if (dest_rect.left >= SCREEN_WIDTH)
{
num_speed=0;
}
HRESULT h=lpDDBuffer->Blt(&dest_rect,lpDDBitmap,&src_rect[num_rect],DDBLT_WAIT | DDBLT_KEYSRC,NULL);
if(FAILED(h))
{
ErrorAndClear(GetErrorInfo(h));
return 0;
}
while(FAILED(lpDDPrimary->Flip(0,DDFLIP_WAIT)));
// 上面的代码就是装载位图文件,将位图blt到后备缓冲,然后在调用flip() 函数实现换页。
当你没有指定关键色 (color- key)的时候不能在blt的函数第四个参数中指定DDBLT_KEYSRC |或者DDBLT_KEYDEST 标志, 否则函数调用会返回错误信息 DDERR_INVALIDPARAMS.
当你传给blt函数的源矩形,目标矩形不正确的情况下,也回返回。DDERR_INVALIDPARAMS。 假设你的矩形left与 right交叉了。就会出现这种错误。
blt函数调用, 记住不能在lock与 unlock之间调用。 参数信息一定仔细检查是不是正确的。
DirectDraw关于blt的一些注意事项相关推荐
- DirectDraw基础篇(学东西还是基础的好哦!)
第一节 DirectDraw简介 Grubers的一个观点是DirectDraw"只是一个bltting发动机".这是相当准确的,但却太简化了.更准确地讲,DirectDraw是一 ...
- DirectDraw基础篇
DirectDraw基础篇(学东西还是基础的好哦!) 第一节 DirectDraw简介 Grubers的一个观点是DirectDraw"只是一个bltting发动机".这是相当准确 ...
- DirectDraw 基础篇
DirectDraw基础篇(学东西还是基础的好哦!) 第一节 DirectDraw简介 Grubers的一个观点是DirectDraw"只是一个bltting发动机".这是相当准确 ...
- 游戏编程之四 diectxdarw基础篇
视频课:https://edu.csdn.net/course/play/7621 第四章 diectxdarw基础篇 第一节 DirectDraw简介 Grubers的一个观点是Direc ...
- 在vs2008中编译Secret Maryo Chronicles
Secret Maryo Chronicles是一款类似于马里奥的开源游戏.是优秀2D模版卷轴游戏的典范.是学习2D游戏设计的好材料 这是个由C++写的游戏.使用了openGL+SDL作为主框架.以及 ...
- directdraw overlay 和flip及blt的区别
(1)为什么需要overlay:为什么需要overlay? overlay产生的原因是:1,避免在vertical blank时flip/blt surface造成的画面"撕 裂" ...
- DirectDraw播放中BLT failed与Lock失败问题
DirectDraw播放中BLT failed与Lock失败问题 编者:李国帅 qq:9611153 微信lgs9611153 时间:2009-10-13 03:07下午 背景原因: 这是一个曾经遇到 ...
- 关于DirectDraw
本文主要是在网上收集到的一些关于DirectDraw的文章! 一下为相关文章和链接(为什么给了链接还要给文章?因为怕给的链接失效,这样我们就找不到那些好的文章了,在这也谢谢那些提供文章的人!!!) 文 ...
- 从头学习DirectDraw
在开始学习DirectDraw编程之前,有一些题外话要说明,以下内容均是个人的心得和体会,如果其中有什么谬误之处,敬请谅解,同时个人不对可能造成的后果负责.. 以下几点是在编制DirectX应用程序时 ...
最新文章
- 【正则表达式】1.入门
- Hbase Java API详解
- 孟岩谈Erlang:并行计算和云计算
- java launcher 下载_Java Launcher下载并安装
- 485不用双绞线可以吗_现在在上海,挡风玻璃可以一个标志都不用贴吗?
- Linq 左连接 内连接
- amd为什么还用针脚_AMD千年老二的位置能改变吗?
- 也谈大公司病3——治大国不是烹小鲜
- GDAL中的SURF算法
- 计算机的组成 —— 鼠标
- hdu 1425 sort用堆排序做的
- java统计代码行数
- 浏览器0x80004005 无法上网
- 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15] .
- 学会聆听,职场最重要的事情,没有之一!!!
- 安卓手机怎么连苹果电脑?
- 树莓派实验室python人脸识别_使用树莓派进行简易人脸识别
- 堡垒机定义、由来以及价值简单说明
- AndroidManifest.xml--android系统权限定义
- MATLAB:变量类型与赋值