Project1

标题: 光标为什么不能停留在窗口上 [打印本页]

作者: kvkv97    时间: 2016-3-15 22:55
标题: 光标为什么不能停留在窗口上
本帖最后由 RyanBern 于 2016-3-16 14:02 编辑

为什么默认脚本按了C键后,光标依然能出现在状态窗口上,不会自动进入“装备窗口”上;而我的脚本却按了C键后,光标不会停留出现在状态窗口上,而是自动进入“装备窗口”上?
具体地说,就是:
在默认脚本和我的脚本同个位置添加“p "000"”,同样按C键后,默认脚本光标出现在状态窗口上,需要继续按C键,才会出现“"000"”然后进入“装备窗口”,而我的脚本却先出现“"000"”然后无须再按C键就自动进入“装备窗口”。
我想知道,为什么默认脚本能作到按C键后,不会先出现“p "000"”并且光标出现在状态窗口上,需要继续按C键,才会出现“"000"”然后进入“装备窗口”?
RUBY 代码复制
  1. def update_status
  2.     #如果按B键
  3.     if Input.trigger?(Input::B)
  4.       #命令窗口激活
  5.       @window_commond.active = true
  6.       #状态窗口熄灭
  7.       @status_window.active  = false
  8.       #状态窗口光标
  9.       @status_window.index  = -1
  10.     end
  11.     #如果按C键
  12.     if Input.trigger?(Input::C)
  13.       case @window_commond.index
  14.         when 0
  15.           p "000"
  16.           #切换到装备画面
  17.           $scene = Scene_Equip.new
  18.       end
  19.     end
  20.   end

作者: yang1zhi    时间: 2016-3-15 23:24
@status_window.index这个是光标位置,第一个是0,之后每个加1
作者: cinderelmini    时间: 2016-3-15 23:34
因为你的脚本在update_command(无误?)方法里按下C键的场合直接转到装备界面了……
作者: kvkv97    时间: 2016-3-15 23:42
“因为你的脚本在update_command(无误?)方法里按下C键的场合直接转到装备界面了……”
——从来就没有!我试过了,把$scene = Scene_Equip.new删除掉,光标可以在 命令窗口 和 状态 窗口 之间 自由切换的。
作者: RyanBern    时间: 2016-3-16 14:00
似乎是这个问题@cinderelmini
update方法在判断按键的时候,后面必须跟return,否则会连续判断,效果就和连点差不多。
RUBY 代码复制
  1. def update
  2.   if @command_window.active
  3.     update_command
  4.   end
  5.   if @status_window.active
  6.     update_status
  7.   end
  8.   # other updates
  9. end
  10. def update_command
  11.   if Input.trigger?(Input::C)
  12.     # deactivate command window and activate status window
  13.   end
  14.   # other input events
  15. end
  16. def update_status
  17.   if Input.trigger?(Input::C)
  18.     case @window_commond.index
  19.     when 0
  20.       #切换到装备画面
  21.       $scene = Scene_Equip.new
  22.     end
  23.   end
  24. end

脚本这样写是不对的,当按下C键的时候,update_command和update_window会同时判断(因为这出现在同一次update中),因此会出现连点效果。

解决办法就是每次update之后要及时return掉,这样才不会进行后面的判断。
RUBY 代码复制
  1. def update
  2.   if @command_window.active
  3.     update_command
  4.     return # <- 'return' can't be ignored
  5.   end
  6.   if @status_window.active
  7.     update_status
  8.     return # <- 'return' can't be ignored
  9.   end
  10. end

同样,update_status的每个按键分歧,最好都要在末尾return一下。防止玩家同时按下两个按键。




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