FreePascal从零开始编游戏(Display单元库使用说明).

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Display单元库使用说明制作:ax_poklFreePascal从零开始编游戏(基础部分)目录前言第一章配置第二章窗口第三章绘图第四章文字第五章消息第六章音频第七章应用目录第八章窗口的建立第九章图片的读取第十章图片的绘制第十一章音频的播放第十二章帧率的获取第十三章用户的消息附录后记前言献给所有热爱游戏编程的程序员们。本教程分为两个部分:基础部分:第一到七章讲解Display单元库使用方法,在阅读前请先阅读《一天学会FreePascal》教程;高阶部分:第八到十三章讲解Display单元库实现方法,在阅读前请先阅读《Pascal之WindowsAPI简明教程》。本教程使用WindowsNT为内核的操作系统。本教程的实例均通过FreePascal2.6.4编译。前言本教程使用Display单元库,请先阅读单元库display.pp内所有文字说明和所有子程序重载本教程所有实例永久下载地址:://axpokl.ys168.com/作者ax_pokl联系方式:E-mail:ax_pokl@sina.com,QQ:395838203。由于作者水平有限,教程难免有错误和疏漏之处,敬请谅解。发现错误请联系作者,谢谢!第一章配置第一节Windows操作系统第二节FreePascal编译器第三节Display单元库第一节Windows操作系统Windows操作系统是微软公司推出的操作系统。正如其名,通过此操作系统可以建立窗口。本教程所用的单元库Display使用了WindowsAPI建立窗口并使用GDI+进行绘图,因此本教程只适用于Windows操作系统。请确保已经安装了以WindowsNT为内核的操作系统。在编写Pascal窗体应用程序时,可以使用编译指令{$APPTYPEGUI}防止控制台的创建。第二节FreePascal编译器为了编译Pascal语言程序,请下载并安装FreePascal编译器(及其IDE):官方手册:你也可以使用任意一款你喜欢的IDE。本教程的编译器以fpc.exe为准。第二节FreePascal编译器运行fp.exe,如果IDE界面出现乱码,请进行以下操作:1、点击File(F10),Commandshell(打开控制台);2、输入chcp437(更改代码页),按回车键执行;3、右键窗口标题栏(或者使用快捷键Alt+空格),属性(P),确定;4、关闭窗口,重新打开程序。你会发现乱码消失了。第三节Display单元库本教程使用Display单元库实现游戏:://axpokl.ys168.com编译单元库源码Display.pp即可获得单元库的目标文件Display.o和编译库文件Display.ppu。请将Display.pp拷贝到主程序同一个目录下。Display单元库仍在不断更新,每个版本不一定相互兼容,因此建议对每一个工程使用独立的Display单元库。第三节Display单元库引入后,可以使用Display单元库的子程序:UsesDisplay;//使用Display单元库beginMsgbox(i2s(GetError()));//弹出错误代码end.GetError获取最后一个WindowsAPI错误代码。i2s将整型转换为ansistring型。Msgbox弹出ansistring型窗口文字。第二章窗口第一节建立窗口第二节设定窗口标题第三节判断窗口状态第四节获取窗口大小第五节关闭窗口第一节建立窗口以下过程可以创建窗口:procedureCreateWin();procedureCreateWin(c:longword);procedureCreateWin(w,h:longword);procedureCreateWin(w,h:longword;cfg,cbg:longword);其中w,h代表宽度和高度,如不指定w,h则默认使用屏幕一半宽高来建立窗口。c为默认颜色。颜色c为四字节ABGR模式(A=透明,B=蓝,G=绿,R=红,各占一个字节)。第一节建立窗口实例:usesDisplay;//使用Display单元库beginCreateWin();//建立窗口Msgbox('窗口已建立');//输出窗口建立信息end.第二节设定窗口标题以下子程序可以设定或获取标题:procedureSetTitle(s:ansistring);functionGetTitle():ansistring;在FreePascal中,ansistring类型和string是自动互相转换的。第二节设定窗口标题实例:usesDisplay;//使用Display单元库beginCreateWin();//建立窗口SetTitle('我是标题');//设定窗口标题Msgbox(GetTitle());//获取并输出窗口标题end.第三节判断窗口状态以下函数可以判断窗口状态:functionIsWin():boolean;如果窗口存在,则该函数返回true,否则返回false。第三节判断窗口状态实例:usesDisplay;//使用Display单元库beginifIsWin()thenMsgbox('Yes')elseMsgbox('No');//输出窗口状态信息CreateWin();//建立窗口ifIsWin()thenMsgbox('Yes')elseMsgbox('No');//输出窗口状态信息end.第四节获取窗口大小以下函数可以获取窗口大小:functionGetWidth():longword;functionGetHeight():longword;functionGetSize():longword;其中,GetSize的前两字节为宽,后两字节为高。可以用Hi(GetSize())和Lo(GetSize())获取。如需改变窗口大小,需要使用消息传递函数。这会在教程的第二部分进行解说。第四节获取窗口大小此外还有以下函数可以获取屏幕大小:functionGetScrWidth():longint;functionGetScrHeight():longint;functionGetScrSize():longword;以及以下函数可以获取窗口位置:functionGetPosX():longint;functionGetPosY():longint;第四节获取窗口大小实例:usesDisplay;//使用Display单元库beginCreateWin();//建立窗口Msgbox(i2s(GetWidth())+''+i2s(GetHeight()));//输出窗口大小信息end.第五节关闭窗口以下过程可以关闭窗口:procedureCloseWin();CloseWin过程不仅会关闭窗口,还会释放窗口句柄及设备上下文句柄(HDC)。也就是说,无法再用CreateBMP函数获取窗口内容,也无法使用LoadBMP函数读取图片。第五节关闭窗口实例:usesDisplay;//使用Display单元库beginifIsWin()thenMsgbox('Yes')elseMsgbox('No');//输出窗口状态信息CreateWin();//建立窗口ifIsWin()thenMsgbox('Yes')elseMsgbox('No');//输出窗口状态信息CloseWin();//关闭窗口第五节关闭窗口ifIsWin()thenMsgbox('Yes')elseMsgbox('No');//输出窗口状态信息CreateWin();//再次建立窗口ifIsWin()thenMsgbox('Yes')elseMsgbox('No');//输出窗口状态信息CloseWin();//再次关闭窗口ifIsWin()thenMsgbox('Yes')elseMsgbox('No');//输出窗口状态信息end.第三章绘图第一节刷新窗口第二节绘制图形第三节读取图片第四节绘制图片第五节绘制拉伸图片第六节绘制透明图片第一节刷新窗口以下函数可以刷新窗口:procedureFreshWin();绘图完毕后必须刷新窗口才能使绘制的内容生效(默认情况下,绘图过程会绘制到缓冲区)。使用绘图过程会占用CPU,因此应尽量避免使用或减少使用次数,例如用图片代替图形。刷新窗口后,帧率会自动更新。详情请阅读第五章第四节帧率获取。第一节刷新窗口实例:usesDisplay;//使用Display单元库beginCreateWin(Red);//建立红色窗口Clear(Blue);//清屏蓝色Msgbox('清屏没有生效');//这里清屏不会生效FreshWin();//刷新窗口Msgbox('清屏已生效');//这里清屏生效了end.第二节绘制图形以下过程可以绘制图形:procedureSetPixel(x,y:longword;c:longword);procedureLine(x,y:longword;w,h:longint;c:longword);procedureBar(x,y:longword;w,h:longint;c:longword);procedureCircle(x,y,r:longint;c:longword);procedureEllipse(x,y,rx,ry:longint;c:longword);procedureClear();procedureClear(c:longword);Clear过程调用了Bar过程。第二节绘制图形实例:usesDisplay;//使用Display单元库varn:longword=$1000;//绘制点数量beginCreateWin();//建立窗口Line(10,10,100,100,Red);//绘制直线Bar(110,10,100,100,Blue);//绘制矩形Circle(60,160,50,Green);//绘制圆形Ellipse(185,160,25,50,Pink);//绘制椭圆第二节绘制图形whilen0dobeginSetPixel(random(GetWidth()),random(GetHeight()),random($FFFFFF));//随机画点n:=n-1;end;FreshWin();//刷新窗口Msgbox('绘制完成');//输出绘制完成信息end.第三节读取图片读取图片之前,请先创建pbitmap类型变量。pbitmap和bitmap类型结构:typepbitmap=^bitmap;typebitmap=recordHandle:longword;DC:longword;Width:longword;Height:longword;Color:longword;FileName:string;end;第三节读取图片以下函数可以读取图片:functionLoadBMP(s:ansistring):pbitmap;functionLoadBMP(s:ansistring;c:longword):pbitmap;s为文件名,c为图片背景颜色(默认透明色)。函数返回pbitmap类型的图片。支持的格式:BMP,PNG,JPG,GIF和TIF。在读取图片之前必须先创建窗口(因为创建图片时需要创建和窗口兼容的设备上下文句柄)。第三节读取图片实例:usesDisplay;//使用Display单元库varimg:pbitmap;beginCreateWin

1 / 120
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功