Project1

标题: 雪流星脚本教程第五弹:Window脚本教程二 [打印本页]

作者: 雪流星    时间: 2008-11-22 20:30
标题: 雪流星脚本教程第五弹:Window脚本教程二
雪流星脚本教程第五弹:Window脚本教程二

小幽的VX实用脚本查询手册:
VX实用脚本查询手册

说明档:
点此下载

在上次的教程中,我们在Window里面显示文字
现在开始在Window里面绘制我们想要显示的图标或图片。

继续上次的工程。

把上次显示文字的X座标改成 24
self.contents.draw_text(24, 0, 120, WLH, $game_variables[1]) # 显示一号变量

这是为了要留空间来绘制我们的图标。

然後用素材管理器,打开 IconSet.png。
我们可以看到,里面有一个硬币的图标,就用那个吧。
要显示图标,首先我们要先算出图标的号码(icon_index),
以硬币图标来说,是205号

IconSet的格式是一排 16 个图标,纵向延伸
所以算法是
第一排: 0 1 2 3 4 5 ...... 15
第二排:16 17 18 19 20 .... 31
依此类推。

如果要公式化的话,就是:
(栏数 - 1)+ 16 * (排数 - 1)

决定好图标後,就来决定 XY座标
呃~~0, 0 就好了

然後我们在 显示文字的前面加上
draw_icon(205, 0, 0)

这就是绘制图标的脚本:
draw_icon(icon_index, x, y[, enabled])
icon_index就是刚才所说的图标号码
x, y ... 不用说了,座标
enabled 是什麽呢?
这是用来表示图标是不是有效化的参数。
不提供的话,默认为 true。
用 false 的时候会将图标半透明绘制(就是向物品无法使用时,图标和文字都会半透明显示一样)
PS:参数如果用中括弧 [] 框住,代表是可以选填的参数。

OK,测试一下



好,测试完毕。

皆下来我们来讲解如何在窗口中显示图片
用这一张图...

将刚才显示图标的语句注释掉
然後添加:
bitmap = Cache.load_bitmap("Graphics/Pictures/", "test")
rect = Rect.new(0, 0, 24, 24)
self.contents.blt(0, 0, bitmap, rect)

第一句:bitmap = .....
是从 Graphics/Picture 文件夹内载入一个叫做 test 的文件,
转为一个 Bitmap 对象,保存在区域变量 bitmap 内。
注意!!如果Pictures 文件夹内没有这个文件的话,就会出错。

当然,还有别的语句也可以达成同样的效果,例如:
选项一:bitmap = Bitmap.new("Graphics/Pictures/test")

选项二:bitmap = Cache.picture("test")

这里不使用「选项一」的原因,就是如同在 Cache 脚本里面的注释一样:
本模组载入所有图像,建立并保存Bitmap对象。为加快载入速度并节省内存,
本模组将以建立的bitmap物件保存在内部哈希表中,使得程序在需求已存在
的图像时能快速读取bitmap物件。

就是说,用Cache.load_bitmap来载入,Cache模组就会将载入的图像保存起来
之後要调用的时候就会比较快。
也就是说,以後我们在显示大量图片的时候,就可以加快载入速度。

这里不使用「选项二」的原因,是因为那句的背後,实际上也是调用同样的语句
只不过将第一个参数(也就是"Graphics/Pictures/")预先设定好而已。
其他相同的方法请看本次教程的附录。


继续讲解....
rect = Rect.new(0, 0, 24, 24)
这句等下再解释,先讲
self.contents.blt(0, 0, bitmap, rect)

他的语法是:
self.contents.blt(x, y, src_bitmap, src_rect[, opacity])
x, y不用说了,座标
src_bitmap就是来源位图,就是我们刚才载入的那张
opacity跟刚才的enabled类似,不过这个是可以直接指定0~255的透明度
不提供的话,默认255

src_rect 呢?
嘿嘿,先卖个关子,测试一下看看效果吧。



有没有发现到,那张图片只显示了一部份呢?
记不记得在 Scene 教程的第三部分中,我们讲到了 viewport 的功能呢?
如果把 src_bitmap 当作一个 scene 的话,那麽 src_rect 就是它的 viewport。
换句话说,src_rect 就是限制这个位图所能显示的区域。
如果我们想要显示他的正中央的话。
那就把 rect 设定为:
rect = Rect.new( (bitmap.width/2)-12 , (bitmap.height/2)-12, 24, 24)
那麽绘制的就是:
(红圈的部分)

效果:



今天就講解到這裡吧,跟上次一样,讲一下其他绘制图片的方法:
绘制头像:draw_face(face_name, face_index, x, y[, size])
绘制行走图:draw_character(character_name, character_index, x, y)

这两个是直接提供行走图/头像的文件名和index来绘制图片
face_name 是头像文件名
face_index 是头像 index
character_name 是行走图文件名
character_index 是行走图 index

绘制角色头像:draw_actor_face(actor, x, y[, size])
绘制角色行走图:draw_actor_graphic(actor, x, y)

这两个是提供角色,从角色中获取行走图/头像文件名和index,再调用draw_face或draw_character来绘制。

[LINE]1,#dddddd[/LINE]
来个练习吧。

绘制一个像这样的窗口


提示:
窗口X:0
窗口Y:314
窗口宽度:160
窗口高度:102

每个碎片是20X20大小,间隔为5像素





附录:
Cache 内的方法
载入动画素材:Cache.animation(filename, hue)
载入战斗图素材:Cache.battler(filename, hue)
载入行走图素材:Cache.character(filename)
载入头像素材:Cache.face(filename)
载入远景图素材:Cache.parallax(filename)
载入图片素材:Cache.picture(filename)
载入系统图片素材:Cache.system(filename)

直接载入 Graphics里面的文件夹,名为 filename 的文件
文件夹名称就是 . 後面那段 animation, battler, .....等
hue是指色调,只有动画和战斗图有调用



[LINE]1,#dddddd[/LINE]
发布页面:http://rpg.blue/web/htm/news1221.htm
vip+2

              [本贴由 66RPG发布员 于 2008-12-20 0:20:17 进行了编辑]
作者: 星辰天羽    时间: 2008-11-22 20:58
好东西,继续支持教程!!不过这种窗口要依次往上绘制怎么做?比如多货币的情况?
作者: wantengliang    时间: 2009-2-18 23:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: a827594998    时间: 2010-9-8 21:20
楼主,谢谢你了




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1