设为首页 加入收藏

TOP

【Asphyre引擎】学习笔记(二)(二)
2017-10-10 12:06:57 】 浏览:5500
Tags:Asphyre 引擎 学习 笔记
读懂,假设你记不住的话。

在这里我们使用AsphyreFactory的定义。具体为什么要使用$10000700,你可以查找MSDN里面的详细说明,当我们在Windows下编写程序的时候,我们会经常使用msdn来查找一些windows特有的声明。

为了使用idDirectX7,我们又要引入一个新单元,DX7Providers单元。单元引用现在看起来应该是这样:

uses
  Vectors2px, AsphyreFactory, DX7Providers;

接下来我们要引入两个重要的设备:

  GameDevice : TAsphyreDevice = nil;
  GameCanvas : TAsphyreCanvas = nil;

TAsphyreDevice和TAsphyreCanvas,它们所在的单元和Asphyre旧版本不同。分别在AbstractDevices, AbstractCanvas单元。

我们将在 Var Form1:TForm1下面声明它们,当然你可以在其它允许声明的位置声明它们。我们的声明是下面这个样子。

var
  Form1: TForm1;
  GameDevice : TAsphyreDevice = nil;
  GameCanvas : TAsphyreCanvas = nil;

请注意,在Form1:TForm1下面。这样,我们就在要程序的最开始位置引入单元,看起来像下面这个样子。

 

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AbstractDevices, AbstractCanvas;

 

如果你是一个刚要进入Delphi的入门者,你可能会很可怪,为什么单元的引入位子在上面也有,在下面也有。很烦的,这个问题,你先不要考虑,讨论这个问题会偏离我们第一个目标的主题很远。所以你先试着接受它,在以后很长一段学习DELPHI的日子里,总有一天,我们会搞明白它们的每一个细节,只要你有足够的耐心学习下去。

 

言归正传,我假设你有一定的计算机基础知识,那么我们要说明上面两个设备的关系。

TAsphyreDevice,你可以把它想象成驱动设备,它是我们跟DirectX沟通的桥,所有我们要使用的DirectX都要在TAsphyreDevice里实现,它是我们使用DirectX的基础。

TAsphyreCanvas,画布,我们要在它上面涂鸦,当然不是用笔,而是用我们的代码。我们使用TAsphyreCanvas涂鸦的作品,最终会在窗口上显示出来。

没有TAsphyreDevice,我们的TAsphyreCanvas将不知道怎样将你的作品通过哪里才能让你看到。

 

由于我们是以类(Class)的方式使用TAsphyreDevice,TAsphyreCanvas,而不是我们常用的控件方式,所以我们在使用前一定要Create(建立)它们。

也许你还在使用控件搭积木的方式使用Delphi,也许你对类(Class)完全不了解。这些都没关系,从现在开始我们将一点一点学习和使用它们。随着越来越熟悉,你会发现潜藏在控件图标下的世界更精彩,从现在开始,你需要去补充类(Class)的知识,你需要找一本基础书去了解,什么是类、抽象类、类的实例化。它们可以帮助你在Delphi的世界里走的更远。

当然这完全不影响你随着我继续学习,你完全可以找一本Delphi基础书先偷偷的充电。

又说远了,继续回到我们的主题上来。我们将在下面的代码里Create  TAsphyreDevice和TAsphyreCanvas。

procedure TForm1.FormCreate(Sender: TObject);

Var
  DisplaySize :TPoint2px;
begin
  ReportMemoryLeaksOnShutdown:= DebugHook <> 0;

  { DisplaySize := Point2px(ClientWidth, ClientHeight); 也可以换一种写法 }

  DisplaySize.x := ClientWidth;
  DisplaySize.y := ClientHeight;

  Factory.UseProvider(idDirectX7);

  GameDevice:= Factory.CreateDevice();
  GameCanvas:= Factory.CreateCanvas();

上面两句GameDevice和GameCanvas,跟据前面的声明,我们将Create它们。当然你也可以将GameDevice和GameCanvas,换成你习惯的名子,但是同时需要修改var Form1: TForm1; 下面的关于GameDevice和GameCanvas的声明。

是不是有些累了,可以试当的休息一下。在Main的单元里有完整的代码,供对照着阅读。

我们下面要做的工作(Work)是要设置GameDevice,也就是TAsphyreDevice。在下面,我们是这样设置的:

  GameDevice.WindowHandle:= Self.Handle;
  GameDevice.Size    := DisplaySize;
  GameDevice.Windowed:= True;
  GameDevice.VSync   := False;

Handle句柄,句柄这个东西不是Delphi生产出来的,而是Windows生产出来的。每个一控件,窗口,设备,都有一个句柄。除了使用名子访问外,还可以用句柄访问。你可以把Handle理解成数字化的名子,这个名子是唯一的,不重复的。

Self :自己。在这里 Self就是我们程序的窗口。我们希望所有的绘画都显示在我们的窗口上。所以我们把自己窗口的句柄告诉TAsphyreDevice。

就是这个样子,GameDevice.WindowHandle:= Self.Handle;

告诉TAsphyreDevice,我们窗口的大小  GameDevice.Size := DisplaySize;

告诉TAsphyreDevice,我们使用窗口模式,而不是全屏幕模式。

告诉TAsphyreDevice,是否打开垂直同步。啥是垂直同步?这个问题很高深。我就不多说了,请参看http://bbs.mydrivers.com/archiver/tid-265698.html,如果还是不同,请在Http://www.huosoft.com/bbs/论坛上提出,我将详细的回答你。

EventDeviceCreate.Subscribe(OnDeviceCreate, 0);

是我们在设置完成后需要写下的句子。这个句子和旧版本不同。

这里EventDeviceCreate.Subscribe将激活一个过程,你在这个过程里可以读取你的资源,然后确定是否让初始成功。

OnDeviceCreate ,我以经用红字标出,在上面的句子里。我们可以看到,EventDeviceCreate.Subscribe将通过OnDeviceCr

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【Asphyre引擎】学习笔记(一) 下一篇Delphi 10 Seattle Update 1 修复..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目