当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: ∫?理论篇 说起DirectDraw也许大多数人还不知其为何物,但一提到DirectX恐怕每一个Computer Fan 和Game Fan都再耳熟不过了。
 

 

    摘要: 髡咧饕常?a href="http://usevb.yeah.net/">傻儿vb园 作者信箱:王文涛   作者在写《傻瓜打表》部件时,原本想提供打印预览功能,因当时眼界较窄,所知道的只有一个方法实现打印预览: 定义一个 object 变量(如:objprn),用该变量替换程序中的与打印有关的语句中的 printer 对象,打印时,首先设置 set objprn = printer 预览......
 ·移动agent体系结构及迁移实…    »显示摘要«
    摘要:  摘要:随着internet的进一步发展,分布式应用的开发越来越受到人们的重视。而现有的几种分布计算技术的不足也逐渐显露。新的分布计算技术-基于mobile agent的分布计算的出现给人们带来了新的发展。本文以三菱公司基于java语言的mobile agent系统concordia为原型,讨论了其体系结构及其agent的移动实现问题。  一、概述  随着internet的不断壮大,分布计算技术......


用DirectDraw编写动画程序
 ∫?理论篇

  说起directdraw也许大多数人还不知其为何物,但一提到directx恐怕每一个computer fan 与game fan都再耳熟不过了.(什么!你没听说过directx!?oh,my god!来人哪,拉下去重责五十大板!)directx又叫game sdk,它最大的特点是直接对硬件的抽象层(hal)进行操作,利用这个特点可以制作出高性能的windows游戏.具体信息请见http://www. microsoft.com/directx/default.asp. 【程序编程相关:体验Win 2003系统中实用的四种We

【推荐阅读:Win2003系统负载平衡策略全攻略

  directdraw就是directx5的6个组件之一.directx5的其它5个组件分别是: 【扩展信息:微软64位操作系统没有1GB内…

  direct3d:提供了3d硬件接口.

  directsound:立体声与3d声音效果,同时管理声卡的内存.

  directplay:支持开发多人网络游戏,并能处理游戏中网络之间的通信问题.

  directinput:为大量的设备提供输入支持.

  directsetup:自动安装directx驱动程序.

  而directdraw则是directx的基石,directx的其它组件都是建立在它的基础之上的.directdraw使用页面切换的方法实现动画,它不仅可以访问系统内存,还可以访问显示内存,这是以往的windows程序员所不能的.另外,我们利用directdraw还可以生成.移动.剪切.转换.合成图像数据,从而编写出各种“炫丽多彩”图形的应用程序.

  介绍了这么一大堆directx的理论,你的头是不是已经有些大了呢?心中一定在嘀咕:“哼,原来是个江湖骗子,光说不练.”各位看官不要着急,不把这些基础理论搞懂就去看下面的程序,你肯定是“洋鬼子看戏——目瞪口呆”.

  首先,让我们先了解一下directdraw的三个重要概念.

  1.表面

  在用directdraw编写程序时,我们先要创建若干个图形数据缓冲区,并把这些图形数据装入其中,再进行转换.拉伸.挎贝等操作,并且还可以显示这些缓冲区中的图形数据,这些缓冲区就称为表面.

  表面可以分为几类.

  主表面(primary surface)是用户在屏幕上可以看到的,它是显示内存的一部分.所有directdraw程序都有主表面,而且只有一个.它在directdraw表面对象之前就已经存在了,因此不能改变它的尺寸.格式与位置.主表面有一个很重要的特性——翻转.页面翻转用于程序中,可以产生相当平滑.不闪烁的动画.一个可以翻转的主表面实际上是两个表面,一个是可见的,一个是不可见的.不可见的表面称为后备缓冲区.当发生表面翻转时,后备缓冲区就成为可见的,而以前的可见表面则成为后备缓冲区.

  还有一 砻娼欣肫帘砻?off_screen surface),它是不能直接见到的.离屏表面作为存储缓冲区,有助于表面之间的互相切换,它的大小是可以改变的.

  主表面与离屏表面都分为有调色板的与无调色板的这两类.像素深度为8位(256色)的表面称为有调色板的表面;而像素深度为16位(64k色).24位(16m色)的像素表面称为无调色板的表面,它们存储实际的色彩值(rgb值).在本文下面的程序中,我们使用24位表面即无调色板的表面.

  2. bltting

  bltting是用于复制图形的语言,可以将图像从一处拷贝到另一处.例如大家所熟悉的cdc类(设备描述表类)的bitblt()就是具有这样功能的函数.在directdraw中,典型的blt操作是将离屏表面的内容拷贝到一个后备缓冲区,而一般的blt操作调用一个源表面与一个目标表面,把源表面的内容拷贝到目标表面中,不仅可以整体拷贝源表面,而且还可以拷贝源表面内的任何矩形区域到目标表面的任何位置.blt还支持透明拷贝,就是指表面中的某一像素在blt过程中可以不予以拷贝,而这个像素值是由色彩键码(ddcolor key )决定的.

  directdraw中有三个支持blt的函数,它们是blt().bltbatch().bltfast().blt( )用得最多,bltfast()的速度比blt()要快,但功能却很有限,例如不支持拉伸.剪切等操作.

  还有一个函数bltsurface(),它是directwin类的一个成员函数,blt().bltfast()更具有适应性,并且使用起来更加简单.例如,当我们把源表面拷贝到目标表面外时需要裁剪,而bltfast()不支持裁剪.这时我们使用bltsurface()函数,它在内部使用blt()与 bltsurface()函数,并根据情况自动执行裁剪.


...   下一页
 ·接口设计对软件性能的影响    »显示摘要«
    摘要:  性能方面的问题有好多种。最容易修正的一种是,在执行一项计算任务时使用了一个性能不好的算法,例如,在对数目很多的数据进行排序时采用了起泡算法,每次使用时对一个经常使用的数据项进行计算而不是将它保存起来,这些问题一般我们都能很容易发现,而且一旦发现后,都能很方便地进行改正。然而,许多java程序性能方面的问题都是是由一些比较深奥的、不容易修改的代码━━程序组件的接口设计引起的。  大多数的程序都是......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE