topping

topping

主程序给Lua提供的接口API说明

  1. 主程序引擎架构 主程序JYLua实现了一个最基本的图形引擎,lua可以调用这些函数进行游戏编程。

    引擎特点:

    1. 自动处理16/32位分辨率。需要directx8.1以上,最少16M显存

    2. 窗口为640*480大小。

    3. 支持加载png位图文件以及含有png文件的idx/grp贴图文件。目前只支持24位色png文 件,alpha通道为全透明/全不透明。

    4. 显示贴图采用缓存结构,使用者无需关心如何加载。这样既保持一定效率,又减小对内存的使用。

    5. 只采用一个显示表面,所有的图形操作都在这一个表面上进行。

  2. Lua脚本

    目前使用lua5.1.2版本,运行时主程序自动调用脚本script\jymain.lua。并运行其中的JY_Main()函数。

    游戏编写者从这里开始编写游戏函数。 实际上,如果完全重写jymain.lua的话,完全可以编制一个全新的游戏。

  3. API函数列表: 以下函数都是主程序引擎提供的可以在lua中调用的函数:

    注意:对这些API没有做更多的参数的检查工作,因此要确保输入的参数是合理的。

否则程序可能会出错,也可能什么都不做。 lib.Debug(str) 在主程序目录下的debug.txt文件中输出调试字符串 lib.GetKey() 得到当前按键键码。

键码定义参见windowsAPI GetAsyncKeyState。 此函数处理键盘缓冲区和键盘重复率,返回的是从上次调用以来曾经按下的键。

并且只处理按下一个键的情况。因此如果需要清除键盘缓冲区,需要先调用一次此函数。 lib.GetTime 返回开机到当前的毫秒数 lib.Delay(t) 延时t毫秒 lib.CharSet(str,flag)

返回把str转换后的字符串 flag=0 Big5 —> GBK =1 GBK —> Big5 lib.SetClip(x1,y1,x2,y2) 设置裁剪窗口。

设置以后所有对表面的绘图操作都只影响(x1,y1)-(x2,y2)的矩形框内部。 如果x1,y1,x2,y2均为0,则裁剪窗口为整个表面。

lib.FillColor(x1,y1,x2,y2,color) 用颜色color来填充表面的矩形(x1,y1)-(x2,y1),color为32位RGB。从最高字节依次为0,R,G,B。

如果x1,y1,x2,y2均为0,则填充整个表面。 lib.Background(x1,y1,x2,y2,Bright) 把表面内矩形(x1,y1)-(x2,y2)内所有点的亮度降低为Bright倍。

Bright取值为0-256,0表示全黑,256表示亮度不变。 lib.DrawRect(x1,y1,x2,y2,color) 绘制矩形(x1,y1)-(x2,y2),线框为单个像素,颜色为color lib.DrawStr(x,y,str,color,size,fontname,charset,OScharset) 在(x,y)位置写字符串str。

color:字体颜色,size:字体像素大小,fontname字体名字 charset: 字符串字符集,0 GBK, 1 BIG5 OScharset: 操作系统字符集, -1 自动判断,0 GBK, 1 BIG5 lib.ShowSurface() 把表面显示到屏幕。

在调用此函数前,表面上的数据是不会显示的。 lib.ShowSlow(t,flag) 把表面缓慢显示到屏幕 t 为亮度没变化一次的间隔毫秒数。为了16/32位兼容,一共有32阶亮度变化。 flag: 0 从暗到亮,1 从亮到暗 lib.PicInit(str) 初始化贴图Cache。

str为调色板文件。 在转换场景前调用,清空所有保存的贴图文件信息 第一次调用时需要加载调色板,以后就不需要了,设置str为空字符串即可。 lib.PicLoadFile(filename,id) 加载贴图文件信息 filename 文件名,没有扩展名,比如mmap.idx和mmax.grp只需给出mmap即可。

id 加载编号,0 - 9 最大可加载10个。如果原来就有,则覆盖原来的。 lib.PicLoadCache(id,picid,x,y,flag,value) 加载id所指示的贴图文件中编号为picid/2(为保持兼容,这里依然除2)的贴图到表面的(x,y)坐标。

id为lib.PicLoadFile加载的文件的加载编号。 flag 不同bit代表不同含义,缺省均为0 B0 0 考虑偏移xoff,yoff。=1 不考虑偏移量 对于贴图文件来说,原有的RLE8编码格式都保存一个偏移量数据,表示绘图时实际的偏移。

现在支持新的PNG格式,由于是直接采用png文件保存进grp文件,没有可以保存偏移量的地方。 因此对不需要偏移的贴图,如物品图像,人物头像,直接按照贴图大小保存。加载时设置此位 为1即可。 对于需要考虑偏移量地方,设置此位为0。而为了处理png中的偏移量。

我们假设所有png文件 偏移量都在图形正中间,这样如果要载入新的png贴图,必须放大png文件的大小。使偏移点 刚好位于图形中间。 B1 0 , 1 与背景alpla 混合显示, value 为alpha值(0-256), 0表示透明 需要考虑Alpha混合时,设置此位为1。

注意目前不支持png文件本身中的单个像素的alpha通道,只考虑透明与不透明。 这是是单独进行Alpha混合 B2 1 全黑 该贴图先进行全黑处理,然后再Alpha,只有B1为1时才有意义。 B3 1 全白 该贴图先进行全黑处理,然后再Alpha,只有B1为1时才有意义。

value 当flag设置alpha时,为alpha值。 当flag=0时,flag和value都可以为空。即只需要输入前几个参数即可。 在正常加载贴图到表面时,flag为0。 在战斗中手工选择移动或者战斗位置和人物被击中时,需要特殊的效果,这是就要使用B1,B2,B3。

由于lua不支持单独的位或操作,只能简单用加法替代。

 如:B1,B2设为1,flag=2+4; B1,B3设为1,flag=2+8; lib.PlayMIDI(filename) 重复播放MID文件filename。 

若filename为空字符串,则停止播放当前正在播放的midi lib.PlayWAV(filename) 播放音效AVI文件filename lib.LoadMMap(filename1,filename2,filename3,filename4,filename5,xmax,ymax) 加载主地图