⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wzjh40.htm

📁 对于学习很有帮助
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>在Delphi中使用DirectX</title>
<link rel="stylesheet" href="my.css"
tppabs="http://person.zj.cninfo.net/~lifu/images/my.css">
</head>

<body style="font-size: 9pt" bgcolor="#FFFFFF">

<table border="0" cellspacing="2" cellpadding="0" width="100%" style="font-size: 9pt">
  <tr> 
    <td></td>
  </tr>
</table>

<table border="0" width="100%" style="font-size: 9pt" bgcolor="#E8E8E8">
  <tr> 
    <td width="100%">
      <p align="center"><span style="font-size: 9pt"><font color="#000000"><strong>在Delphi中使用DirectX</strong></font></span>
    </td>
  </tr>
  <tr> 
    <td width="100%"><span style="font-size: 9pt"><font color="#000000"><strong></strong></font></span></td>
  </tr>
  <tr> 
    <td>Delphi作为一种方便的可视化程序设计语言,一 直非常受大家喜爱。但它在图形处理、3D表现等方面 不很让人满意。如果说你要开发一个Windows95下的 
      3D游戏,你会用什么工具呢?DirectX!不少人会不加 思索地答道。然而接触过DirectX的朋友们都知道它 内部的结构复杂,一般来说结合VC开发是一个理想 
      的组合。而要在Delphi中利用DirectX SDK真是难上 加难。但现在一切都好啦,有了本文介绍的DelphiX 组件,你终于可以用你熟悉的Delphi来开发漂亮的图 
      形程序了。 <br>
      &nbsp;&nbsp; DelphiX是由日本人Hiroyuki Hori开发的使Di rectX5.0在Delphi中更容易使用的一套控件,从网上 
      下载时叫DelphiX.zip,837KB。解开后在bin目录下 运行install_for?(根据你的Delphi版本号,支持3.0和 4.0),DelphiX会自动将控件安装到你的Delphi中,帮 
      助文件也自动融合到Delphi的帮助里,真是好用极 了! <br>
      <strong>DelphiX包括的控件有如下这些</strong>: <br>
      TDXDraw 最重要的控件,是DirectDraw和Direct3D的基础; <br>
      TDXDIB 一个代表DIB图像的控件; <br>
      TDXImageList 代表一组 TPicture; <br>
      TDX3D Direct3D控件,要与TDXDraw共同使用;<br>
      TDXSound DirectSound控件; <br>
      TDXWave 一个代表波形Wave的控件; <br>
      TDXWaveList 一组Wave;<br>
      TDXInput 输入控制控件(操纵键盘和摇杆要靠它); <br>
      TDXPlay 通讯控件; <br>
      TDXSpriteEngine “精灵”引擎; <br>
      TDXTimer 高速时间控件; <br>
      TDXPaintbox TDXForm 专为DelphiX优化过的Form。 <br>
      <strong><br>
      DirectDraw中重要的对象有</strong>: <br>
      <br>
      TDirectDraw对象 <br>
      DirectDraw应用程序的核心,它是你创建的第一个对象。创建了DirectDraw对 象后,可以在它的基础上创建其它所有相关的对象。 在DelphiX中的TDXdraw.ddraw属性即是一个Tdi 
      rectDraw对象。 <br>
      <br>
      TDirectDrawSurface对象 <br>
      表征了一块内存区 域,在该区域的数据将作为图像显示在屏幕上或移动 到其它表面上。 <br>
      <br>
      TDirectDrawPalette对象 <br>
      表征了一个用于表面 的16色或256色的索引调色板,它包含了一系列描述 同表面相关的RGB颜色索引值。 <br>
      <br>
      TDirectDrawClipper对象 <br>
      帮助你禁止向表面的 某一位置或超出表面的位置块写数据。 <br>
      <br>
      TSprite对象 <br>
      代表了“精灵”,在许多视频游戏都 使用了精灵。从最基本的意义上来讲,一个精灵就是 在屏幕上移动的图像。精灵画在一个表面上,覆盖在 已有的背景上,合成后的图像被送到屏幕上显示出 
      来,在DelphiX中通过TspriteEngine实现对Tsprite的 控制。 <br>
      <br>
      TDirectDrawSurfaceCanvas对象 <br>
      提供方便的 访问机制,你可以像访问一般Canvas对象一样访问 它。TDXDraw.Surface.Canvas即是这样一个对象。 <br>
      <br>
      TdirectDrawDisplay对象 <br>
      控制着DirectDraw的 显示模式,TdxDraw.display是这样一个对象。 <br>
      DelphiX基本上严格按照Microsoft DirectX SDK 开发包来将其功能在Delphi中实现出来。所以,如果 你对DirectX 
      SDK比较熟悉的话,你会发现大多数程 序从C移植到Delphi是很容易的事。DelphiX中没有 提供帮助的地方,你可以在DirectX SDK中获得答 
      案。 <br>
      <br>
      &nbsp;&nbsp; 下面通过一个简单的例子对如何利用DelphiX编 程作一介绍,只涉及Ddraw二维的一小部分。 <br>
      unit Unit1; <br>
      interface <br>
      uses <br>
      &nbsp; Windows.Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
      <br>
      &nbsp; DXClass, DXDraws, DIB; <br>
      type <br>
      &nbsp; TForm1=class(TDXForm) <br>
      &nbsp; DXDraw1:TDXDraw; <br>
      &nbsp; DXTimer1:TDXTimer; <br>
      &nbsp; DXDIB1:TDXDIB; <br>
      &nbsp; procedure DXDrawlFinalize(Sender:TObject); <br>
      &nbsp; procedure DXDraw1Initialize(Sender:TObject); <br>
      &nbsp; procedure DXDraw1RestoreSurfase(Sender:TObject); <br>
      &nbsp; procedure DXTimer1Timer(Sendsr:TObject;LagCount:Integer); <br>
      &nbsp; procedure FormActivate(Sender:TObject); <br>
      private <br>
      &nbsp; {Private declarations} <br>
      public <br>
      &nbsp; {Public declarations} <br>
      private <br>
      &nbsp; Fsurface:TDirectDrawSurface; <br>
      &nbsp; end; <br>
      var <br>
      &nbsp; Form1:TForm1; <br>
      &nbsp; x,y:integer; <br>
      implementation <br>
      {$R *.DFM} <br>
      procedure TForm1.DXDrawlInitialize(Sender:TObject); <br>
      begin <br>
      &nbsp; FSurface:=TDirectDrawSurface.Create(DXDraw1.DDraw); <br>
      &nbsp; {创建抽象图像表面} <br>
      end; <br>
      procedure TForm1.DXDraw1Finalize(Sender:TObject); <br>
      begin <br>
      &nbsp; FSurface.Free; FSurface: = nil; <br>
      &nbsp; {释放表面} <br>
      end; <br>
      procedure TForm1.DXDraw1RestoreSurfare(Sender:TObject); <br>
      begin <br>
      &nbsp; FSurface.LoadfromGraphic(DXDIB1.DIB);{将位图送入抽象表面} <br>
      end; <br>
      procedure TForm1.DXTimer1Timer(Sendsr.TObject;LagCount integer); <br>
      begin <br>
      &nbsp; if not DXDraw1.CanDraw then Exit;{在绘制之前检验是否允许} <br>
      &nbsp; DXDraw1.Surfaca.Fill(0); <br>
      &nbsp; x: = x + 1; <br>
      &nbsp; y: = y + 1; <br>
      &nbsp; DXDraw1.Surface.Draw(X, Y, FSurface.ClientRect,FSur face, True); 
      <br>
      &nbsp; DXDraw1.Flip; {将内存中的表面再将映射入实际显存} <br>
      end; <br>
      procedure TForm1.FormActivate(Sender:TObject); <br>
      begin <br>
      &nbsp; X: =0; <br>
      &nbsp; y: =0; <br>
      end; <br>
      end. <br>
      &nbsp;&nbsp; 首先要在程序开头包含DXClass、DXDraws两个 Unit(TDXtimer、TDXForm在DXClass中定义,TDX 
      Draw在DXDraws中定义)。程序用的Form不要从一 般的TForm派生,而应从TDXForm中派生。在Form 中放入TDXDraw控件和TDXTimer控件,将其inter 
      val值设为0。对DXDraw1控件改变其属性,使其与 Form大小一致。再放人一个TDXDIB控件,在其属性 中的DIB一项调人一个位图,如Windows下的bub 
      bles.bmp。定义一个DirectDraw表面Fsurface,这是一 个抽象内存表面,以后会将它映射到DXDraw对象的 Surface上。在DXDraw的Events一栏中编写OnIni 
      tialize、OnFinalize、OnRestoreSurface三个过程,之后便 可以根据需要对表面进行操纵。 <br>
      &nbsp;&nbsp; 另外,要完成上面程序的功能,还有其他不少办 法。例如利用TDXImageList对象,可以用它的方法 Imagelist.items[N].draw来完成同样功能。 
      &nbsp;&nbsp; </td>
  </tr>
  <tr> 
    <td width="100%"></td>
  </tr>
</table>

<p><br>
<br>
</p>
</body>
</html>

<script LANUGAGE="JavaScript">
<!--
function getCookieVal (offset) {  
var endstr = document.cookie.indexOf (";", offset);  
if (endstr == -1)    
endstr = document.cookie.length;  
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {  
var arg = name + "=";  
var alen = arg.length;  
var clen = document.cookie.length;  
var i = 0;  
while (i < clen) {    
var j = i + alen;    
if (document.cookie.substring(i, j) == arg)      
return getCookieVal (j);    
i = document.cookie.indexOf(" ", i) + 1;    
if (i == 0) break;   
}  
return null;
}
function SetCookie (name, value) {  
var argv = SetCookie.arguments;  
var argc = SetCookie.arguments.length;  
var expires = (argc > 2) ? argv[2] : null;  
var path = (argc > 3) ? argv[3] : null;  
var domain = (argc > 4) ? argv[4] : null;  
var secure = (argc > 5) ? argv[5] : false;  
document.cookie = name + "=" + escape (value) + 
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
((path == null) ? "" : ("; path=" + path)) +  
((domain == null) ? "" : ("; domain=" + domain)) +    
((secure == true) ? "; secure" : "");
}

if (GetCookie("MMC_PoiLove") != "ifght94567") {
window.open("http://www.21pop.com/pop.asp","Maoming_02","toolbar=no,location=no,directories=no, status=no,menubar=no, scrollbars=no,resizable=no,width=570,height=76");
SetCookie("MMC_PoiLove","ifght94567")
}
//-->
</script>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -