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的一些注意事项相关推荐

  1. DirectDraw基础篇(学东西还是基础的好哦!)

    第一节 DirectDraw简介 Grubers的一个观点是DirectDraw"只是一个bltting发动机".这是相当准确的,但却太简化了.更准确地讲,DirectDraw是一 ...

  2. DirectDraw基础篇

    DirectDraw基础篇(学东西还是基础的好哦!) 第一节 DirectDraw简介 Grubers的一个观点是DirectDraw"只是一个bltting发动机".这是相当准确 ...

  3. DirectDraw 基础篇

    DirectDraw基础篇(学东西还是基础的好哦!) 第一节 DirectDraw简介 Grubers的一个观点是DirectDraw"只是一个bltting发动机".这是相当准确 ...

  4. 游戏编程之四 diectxdarw基础篇

    视频课:https://edu.csdn.net/course/play/7621 第四章 diectxdarw基础篇 第一节 DirectDraw简介      Grubers的一个观点是Direc ...

  5. 在vs2008中编译Secret Maryo Chronicles

    Secret Maryo Chronicles是一款类似于马里奥的开源游戏.是优秀2D模版卷轴游戏的典范.是学习2D游戏设计的好材料 这是个由C++写的游戏.使用了openGL+SDL作为主框架.以及 ...

  6. directdraw overlay 和flip及blt的区别

    (1)为什么需要overlay:为什么需要overlay? overlay产生的原因是:1,避免在vertical blank时flip/blt surface造成的画面"撕 裂" ...

  7. DirectDraw播放中BLT failed与Lock失败问题

    DirectDraw播放中BLT failed与Lock失败问题 编者:李国帅 qq:9611153 微信lgs9611153 时间:2009-10-13 03:07下午 背景原因: 这是一个曾经遇到 ...

  8. 关于DirectDraw

    本文主要是在网上收集到的一些关于DirectDraw的文章! 一下为相关文章和链接(为什么给了链接还要给文章?因为怕给的链接失效,这样我们就找不到那些好的文章了,在这也谢谢那些提供文章的人!!!) 文 ...

  9. 从头学习DirectDraw

    在开始学习DirectDraw编程之前,有一些题外话要说明,以下内容均是个人的心得和体会,如果其中有什么谬误之处,敬请谅解,同时个人不对可能造成的后果负责.. 以下几点是在编制DirectX应用程序时 ...

最新文章

  1. 【正则表达式】1.入门
  2. Hbase Java API详解
  3. 孟岩谈Erlang:并行计算和云计算
  4. java launcher 下载_Java Launcher下载并安装
  5. 485不用双绞线可以吗_现在在上海,挡风玻璃可以一个标志都不用贴吗?
  6. Linq 左连接 内连接
  7. amd为什么还用针脚_AMD千年老二的位置能改变吗?
  8. 也谈大公司病3——治大国不是烹小鲜
  9. GDAL中的SURF算法
  10. 计算机的组成 —— 鼠标
  11. hdu 1425 sort用堆排序做的
  12. java统计代码行数
  13. 浏览器0x80004005 无法上网
  14. 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15] .
  15. 学会聆听,职场最重要的事情,没有之一!!!
  16. 安卓手机怎么连苹果电脑?
  17. 树莓派实验室python人脸识别_使用树莓派进行简易人脸识别
  18. 堡垒机定义、由来以及价值简单说明
  19. AndroidManifest.xml--android系统权限定义
  20. MATLAB:变量类型与赋值

热门文章

  1. HAUT 1262 魔法宝石 暴力思想,多种解决方案
  2. [题解]LuoGu2698: [USACO12MAR]花盆Flowerpot
  3. 为什么 1 KB = 1024 B? 1 MB = 1024 KB?
  4. python爬取12306_Python 爬取12306火车票
  5. ffmpeg 奇葩问题2
  6. 流,向量场,和微分方程
  7. vmware之设置共享文件夹
  8. BTC-Relay与RootStock侧链技术对比
  9. JRE和JDK的解释及区别
  10. java-语言学习-JDK和JER