赞 | 5 |
VIP | 71 |
好人卡 | 22 |
积分 | 6 |
经验 | 32145 |
最后登录 | 2013-8-9 |
在线时间 | 184 小时 |
Lv2.观梦者 天仙
- 梦石
- 0
- 星屑
- 620
- 在线时间
- 184 小时
- 注册时间
- 2008-4-15
- 帖子
- 5023
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
雪流星脚本教程第五弹: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来绘制。
来个练习吧。
绘制一个像这样的窗口
提示:
窗口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是指色调,只有动画和战斗图有调用
发布页面:http://rpg.blue/web/htm/news1221.htm
vip+2
[本贴由 66RPG发布员 于 2008-12-20 0:20:17 进行了编辑] |
|