赞 | 5 |
VIP | 71 |
好人卡 | 22 |
积分 | 6 |
经验 | 32145 |
最后登录 | 2013-8-9 |
在线时间 | 184 小时 |
Lv2.观梦者 天仙
- 梦石
- 0
- 星屑
- 620
- 在线时间
- 184 小时
- 注册时间
- 2008-4-15
- 帖子
- 5023
|
第六节 功能扩充(一)「窗口闪避与隐藏」
时间窗口的功能已经说的差不多了,基本上的功能都已讲解完毕,现在开始说一些附加的功能,这些功能可以用在其他种类的窗口上,只要你有些脚本基础,应该都能知道开把这些脚本加在何处。好了,不多说废话了,开始上课。
首先我们看到,当我们将角色移动到萤幕上方时,会发现角色被窗口挡住了。这是因为我们的窗口Z值(优先度)比角色高的关系,难道说把Z值调低就行了吗?NO!NO!NO!绝对不行。这样只会让角色把窗口当地毯踩而已。
那要怎麽做呢?像标题说的,让窗口「闪一边去」。
作法就是当角色X/Y值接近窗口时,改变窗口的座标位置。
if $game_player.screen_x >= (0 - 16) && $game_player.screen_x <= (0 + 640 + 16)
if $game_player.screen_y >= (0 - 16) && $game_player.screen_y <= (0 + 55 + 16)
self.x = 425
self.y = 0
else
self.x = 0
self.y = 0
end # end if
else
self.x = 0
self.y = 0
end # end if
这段脚本究竟在说什麽呢?先解释变数的名称意义
$game_player.screen_x 是指角色在画面上的座标(注意与地图座标不同)
$game_player.screen_y 不用说当然是角色在画面上的Y座标啦。
self 是表示自身对象的伪变量,在这里表示窗口,所以self.x 和self.y 分别代表窗口的X、Y座标。
再来解释公式,因为考虑到有人没有用我前面的座标,而是自己设置喜欢的位置,所以写的比较麻烦些。
第一个(0 – 16)的0是默认的窗口X座标,代表窗口的最左边位置座标。
(0+640+16)的0+640 则是X座标+窗口宽度,代表窗口最右边位置座标。
第二个(0 - 16)的0是默认的窗口Y座标,代表窗口的最上方位置座标。
(0+55+16) 的0+55 则是Y座标+窗口高度,代表窗口的最下方位置座标。
这四个数值(0, 640, 0, 55)可以在意开始就用变数代替,後面有讲到窗口样式时再说,这里先按下不表。这里用的条件分歧就是说「当角色走到视窗范围的时候」。至於±16则是调整手感,16像素大约是地图图块的半格。
皆下来就简单了,在if条件分歧的条件就是
当角色座标小於等於窗口的左方并且大於等於窗口的右方时
当角色座标小於等於窗口的上方并且大於等於窗口的下方时
改变窗口的座标
除此以外的场合
恢复窗口座标
分歧结束
除此以外的场合
恢复窗口座标
分歧结束
改变窗口座标只要修改X、Y值就行了,参考上面的脚本。
接下来讲解窗口隐藏。
这里的窗口隐藏就是让窗口像window的「开始」工作列能够自动隐藏,作法与窗口闪躲类似,但是要注意到隐藏的方向,不要反而让窗口「飞」起来。再来还要想好,要按那个键会让窗口出现,这里选RMXP理得A键。
以这里的窗口作范例,由於它位於画面上方,理所当然隐藏方向是「上」。
先把刚才写的窗口闪避的脚本注释掉,因为这两个功能会互相冲突,稍後再讲解整合的方法。
if Input.press?(Input::A)
self.x = 0
self.y = 0
else
self.y = - (55) + 8
end
这里的两个0就是正常的XY座标,而 -(55) + 8(注意有-)就是让窗口变成隐藏状态的公式。基本公式是:正常座标 + 窗口高/宽度 - 残留宽度 或 正常座标 - 窗口高/宽度 + 残留宽度 视方向而定。在此提供四个隐藏方向的公式。
上:self.y = 正常Y座标 - 窗口高度 + 残留宽度
下:self.y = 正常Y座标 + 窗口高度 - 残留宽度
左:self.x = 正常X座标 - 窗口宽度 + 残留宽度
右:self.x = 正常X座标 + 窗口宽度 - 残留宽度
不过通常往上或往右隐藏的窗口X/Y座标应该会是0,所以正常X/Y座标可以略过不计。因此上面的脚本是 -55 + 8。对了!残留宽度指的是当窗口隐藏後,剩馀看的见的宽度,推荐8像素。
再来讲解如何整合这两个功能:
首先,解除闪避功能的注释。在改变窗口座标的後面加上一个开关,并设为打开。(开关名称常一点不要紧。)
再来,在恢复窗口座标的後面加上同样的开关,但是设为关闭。(记得有两个地方。)
在隐藏功能那段:
if 按下A键时
if 闪避开关为on
改变窗口座标
除此之外的场合
恢复窗口座标
结束分歧
除此之外的场合
if闪避开关为on
向下隐藏窗口
除此之外的场合
向上隐藏窗口
结束分歧
结束分歧
翻译成脚本:
if $game_player.screen_x >= (0 - 16) && $game_player.screen_x <= (0 + 640 + 16)
if $game_player.screen_y >= (0 - 16) && $game_player.screen_y <= (0 + 55 + 16)
self.x = 0
self.y = 425
@time_date_time_window_shifted = true
else
self.x = 0
self.y = 0
@time_date_time_window_shifted = false
end # end if $game_player.screen_y >= (0 - 16) && $game_player.screen_y <= (0 + 55 + 16)
else
self.x = 0
self.y = 0
@time_date_time_window_shifted = false
end # end if $game_player.screen_x >= (0 - 16) && $game_player.screen_x <= (0 + 640 + 16)
if Input.press?(Input::A)
if @time_date_time_window_shifted == true
self.x = 0
self.y = 425
else
self.x = 0
self.y = 0
end # end if @time_date_time_window_shifted = true
else
if @time_date_time_window_shifted == true
self.y = 425 + 55 - 8
else
self.y = -(55) + 8
end # end if @time_date_time_window_shifted = true
end # end if Input.press?(Input::A)
其实简单说起来,就是在闪避窗口後打开一个开关,然後在根据开关的状态判断往上还是往下隐藏窗口。还可以用case条件分歧做成更复杂的窗口隐藏功能,这里就要看个人的功力了,不是本教程的范围所能及的。可以参考我的「超自定义时间日期天气昼夜脚本系统」里面的隐藏功能,因为里面考虑到大家所设定的座标和窗口隐藏方向会不同,所以用了变数和case条件分歧。
下一节:功能扩充(二)窗口文字自订排版 |
|