Project1

标题: 怎么实现:“脚本条件分歧:当开关1为ON时” [打印本页]

作者: 315038639    时间: 2012-2-12 20:04
标题: 怎么实现:“脚本条件分歧:当开关1为ON时”
RT,我只知道if-end,if的条件“当开关1为ON时怎么写啊?”dsu_plus_rewardpost_czw
作者: 凌童鞋    时间: 2012-2-12 20:08
本帖最后由 凌童鞋 于 2012-2-12 20:09 编辑

if $game_switches[1] == true
……
end
作者: 315038639    时间: 2012-2-12 20:25
凌童鞋 发表于 2012-2-12 20:08
if $game_switches[1] == true
……
end
  1.     if $game_switches[1] == false
  2.       Input.update                  # 更新输入讯息
  3.     end
复制代码
再请教一下:我为了用全键盘脚本做了个这个,把“Input.update”用这个if句括起来了,但当我一号开关打开的时候还是执行了。为什么捏?
而且好像用 $game_switches[1] == true 打不开一号开关……
作者: 凌童鞋    时间: 2012-2-12 20:32
标题: RE: 怎么实现:“脚本条件分歧:当开关1为ON时”
315038639 发表于 2012-2-12 20:25
再请教一下:我为了用全键盘脚本做了个这个,把“Input.update”用这个if句括起来了,但当我一号开关打开 ...

你要是scene类在update里super了的话当然不行,因为scene_base的update中是更新这个的。
另外
赋值用=
判断用==
所以你当然没打开……
作者: yychchhh    时间: 2012-2-15 21:24
  1. $game_switches[编号] = true / false
  2. true是打开,false是关闭
复制代码
就是这个
作者: 各种压力的猫君    时间: 2012-2-16 04:44
本帖最后由 各种压力的猫君 于 2012-2-16 04:56 编辑
Input.update
更新输入信息。原则上是每一画格调用此方法一次。


一般的循环都要就这样写的:
RUBY 代码复制
  1. loop do
  2.   Graphics.update
  3.   Input.update
  4.   do_something
  5. end


不明白你想暂时屏蔽它干什么。但是想要暂时屏蔽的话就直接在脚本编辑器里改:
(Ctrl+Shift+F 默认工程可以找到四处I nput.update 。下面以 Scene_Base 中的为例)
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Base
  3. #------------------------------------------------------------------------------
  4. #  游戏中全部画面的超级类。
  5. #==============================================================================
  6.  
  7. class Scene_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 主处理
  10.   #--------------------------------------------------------------------------
  11.   def main
  12.     start                         # 开始处理
  13.     perform_transition            # 执行渐变
  14.     post_start                    # 开始后处理
  15.     Input.update                  # 更新输入讯息
  16.     loop do
  17.       Graphics.update             # 更新游戏画面
  18.       Input.update                # 更新输入讯息
  19.       update                      # 更新画面
  20.       break if $scene != self     # 切换画面时中断循环
  21.     end
  22.     Graphics.update
  23.     pre_terminate                 # 结束前处理
  24.     Graphics.freeze               # 准备渐变
  25.     terminate                     # 结束处理
  26.   end
18行改成:
RUBY 代码复制
  1. Input.update unless $game_switches[66]

unless就和英文单词的意思一样,表示“除非”——即反向的if判断。
unless $game_switches[66] 完整写法是:unless $game_switches[66]==true (判断语句不写的时候都隐含==true)
于是这句话的意思就是:执行Input模块的update方法(以更新输入),除非第66号开关被打开。
这样当你打开66号开关的时候所有默认的 Scene 都将不再执行 Input.update (因为 Scene_Base 是他们的父类)

或者可以更暴力一点,直接对Input模块的update方法进行重定义。
在“▼ 外来RGSS插件脚本”下面插入以下脚本:
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Input 输入模块
  3. #------------------------------------------------------------------------------
  4. #  处理遥控器/游戏杆或键盘输入信息的模块。
  5. #==============================================================================
  6. # 实际上 Input 是一个模块,
  7. # 本应使用 module Input 这种写法。
  8. # 但是这里需要对 Input 模块的原有方法进行重命名,
  9. # 而模块不支持重命名,遂只能采用匿名类间接实现。
  10. # 不能一下理解也无所谓,一般的脚本用不上匿名类。
  11. class << Input
  12.   #--------------------------------------------------------------------------
  13.   # ● 更新
  14.   #--------------------------------------------------------------------------
  15.   # 将原来的 update 方法重命名为 _66rpg_update
  16.   # 有关方法的命名规则请参阅帮助文档
  17.   alias _66rpg_update update
  18.   # 重定义 update 方法
  19.   # 因为上面已经用alias设置重名,不会影响到原有内容。
  20.   def update
  21.     # _66rpg_update 表示调用原 update
  22.     _66rpg_update unless $game_switches[66]
  23.   end # <- def update
  24. end # <- module Input

这样当66号开关打开之后,所有的Input.update都会失效。
(别用F9打开开关测试,那个不顶用的。你需要建一个NPC测试。)���
作者: 亿万星辰    时间: 2012-2-16 07:04
条件分歧:脚本:$game_switches[1]

是指这个意思么?




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