设为首页 加入收藏

TOP

【Asphyre引擎】学习笔记(二)(一)
2017-10-10 12:06:57 】 浏览:5504
Tags:Asphyre 引擎 学习 笔记

转一篇火人论坛那边的一份学习文档,我简单排一下版,希望对入门者有帮助。

感谢China Yang,这份文档也帮助我快速入了门。

 

和我一起学

Asphyre Sphinx Framework v1.0.0

China Yang

Http://www.huosoft.com/bbs/ : ID:Installxp

 

  • 前言少序

当我准备用业余时间开始写这段文字,当你准备在Library Path里添上Asphyre的Source文件夹。那么我们一起学习的旅程就开始了,我会把我学习的过程写在这里,希望有一天,你也把你的学习过程形成文字,和其他人一起分享。

这些文字是面向初学者的,所以文字拖沓是必然的,请各路Delphi大仙们绕行。

我们的运行环境是:Delphi 2006。请将你的Asp Sphinx FrameWord v1.0.0 目录下的 Source文件夹添加到:

菜单 ->  Tools  ->  Options  ->  library-Win32 –>  Library Path。

 

  •  第一个目标

我们要在屏幕上用Asphyre 画点。

在此之前你需要了解的基础知识:基本控件的“过程,方法和事件”。这些是必备的知识,如果你不清楚这些,请找一本DELPHI 基础书参照学习。

下面我们开始正式进入ASPHYRE学习,从现在开始我和你一样,一步一步探索。

在程序的开始,我们需要一个事件过程。

请使用Design,我们可以看到设计期的窗口。

我们在空窗口上鼠标左键连续点击两次,DELPHI将智能的帮我们建立下面这个事件:

procedure TForm1.FormCreate(Sender: TObject);

FormCreate 是窗口建立时必然运行的一个过程,你在这个过程所写的代码,将随着窗口的建立而被执行。我们将在这里Create我们程序需要的类和其他一些相关的东西。

FormCreate内的第一句代码:

ReportMemoryLeaksOnShutdown:= DebugHook <> 0;

{ 以下关于第一句代码的相关知识:                                     } 

DELPHI引入了FastMM替换掉早期的内存管理器。FastMM是一个开源的项目,你可以在互联网上找到它,在很长一段时间里有经验的程序员使用它来检测程序的内存泄漏。它可以帮助DELPHI IDE更快,更稳定的运行。当然,即使你不将ReportMemoryLeaksOnShutdown开关打开,FastMM也是在工作的,只是当你的程序出现内存问题时,DELPHI 将不会提示你。所以一个好的习惯就是将它打开,它只会帮助你更好的工作。也可以像下面这样:

ReportMemoryLeaksOnShutdown := True;

当程序是在IDE里运行时 DebugHook = 1 ;当程序在IDE外独立运行时 DebugHook = 0;

如果你是一个刚刚开始学习编程的爱好者,下面的方式可能会让你迷惑,不过不要紧。

ReportMemoryLeaksOnShutdown:= DebugHook <> 0;

( DebugHook <> 0 ) 是一个表达式,当DebugHook是1的时候。( DebugHook <> 0 )将返回一个False (假值)给ReportMemoryLeaksOnShutdown。如果DebugHook 的值是0的时候,( DebugHook <> 0 )将返回一个真值。

言归正传,我们要开始在FormCreate里定义一个DisplaySize看起来像下面这样

Procedure TForm1.FormCreate (Sender: TObject);
Var
  DisplaySize: TPoint2px;        { 我们定义的地方 }
Begin

为了我们能正常的使用TPoint2px,我们要引入Vectors2px单元。所以我们要在Implementation 关键字下面添加第一个引入单元,看起来像下面这样

… …

Implementation

Uses

  Vectors2px;

… …

当我们按住Ctrl键用鼠标去点击Vectors2px的时候,我们就会追踪到某个类和某个类型定义的起始处。

DisplaySize被定义成TPoint2px记录(Record);我们可以追踪到 Vectors2px单元第四十五行。

PPoint2px = ^TPoint2px;
TPoint2px = record
     x, y: Integer;

关于 Record 请参看你手头的工具书,记录(Record);

当然DisplaySize:= Point2px(ClientWidth, ClientHeight);也可以换一个写法,例如下面这样:

  DisplaySize.x := ClientWidth;  { ClientWidth 窗口的宽 }
  DisplaySize.y := ClientHeight;  { ClientWidth 窗口的高 }

上面的句子似乎更容易理解一点,DisplaySize里将保存我们窗口的大小,我们后面会用到它。

接下来,我们还要再引入一个单元AsphyreFactory,该单元保存着接口信息.

因为我们的第一个目标并不复杂,所以DirectX7接口足够我们使用,当然我们也可以使用DirectX8, DirectX9;

… …

Implementation
Uses
  Vectors2px,  AsphyreFactory;

… …

添加完单元,我们的代码看起来是上面这个样子。接下来,我们要告诉Asphyre,我们要使用的DirectX版本。

Factory.UseProvider(idDirectX7);

在我们的第一个目标里,我们不会去涉及Asphyre的细节问题,那不便于我们学习,我们暂时只要知道,Factory.UseProvider可以让Asphyre在某个DirectX版本下工作。其实我暂时也不知道Factory.UseProvider的细节,完全是靠猜的,呵呵。

 

当我们将 Factory.UseProvider(idDirectX7);添加到DisplaySize.y := ClientHeight;的后面,我们会发现idDirectX7是错误的。所以我们要找到idDirectX7的定义。在DX7Providers单元的43行,idDirectX7被定义成常量。idDirectX7 = $10000700; $代表16进制操作符,当然你要原意的话,你也可以直接在括号内使用$10000700,不过当你再阅读的时候,不会容易

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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目