设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 雪流星
打印 上一主题 下一主题

[适合新手][教学]在地图上创建时间窗口

 关闭 [复制链接]

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

11
 楼主| 发表于 2007-8-9 10:08:45 | 只看该作者
第六节        功能扩充(一)「窗口闪避与隐藏」
时间窗口的功能已经说的差不多了,基本上的功能都已讲解完毕,现在开始说一些附加的功能,这些功能可以用在其他种类的窗口上,只要你有些脚本基础,应该都能知道开把这些脚本加在何处。好了,不多说废话了,开始上课。

首先我们看到,当我们将角色移动到萤幕上方时,会发现角色被窗口挡住了。这是因为我们的窗口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条件分歧。

下一节:功能扩充(二)窗口文字自订排版
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
1 小时
注册时间
2008-2-14
帖子
13
12
发表于 2008-6-25 03:23:03 | 只看该作者
{/qiang}超赞~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 14:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表