Project1

标题: 按键呼出界面的判定问题 [打印本页]

作者: acv255    时间: 2015-8-15 15:10
标题: 按键呼出界面的判定问题
照着Scene_Map里的call_menu语句写了段按键呼出任务界面的脚本
RUBY 代码复制
  1. class Scene_Map < Scene_Base
  2.   alias x20150815_update_scene update_scene
  3.   def update_scene
  4.     x20150815_update_scene
  5.     update_call_task unless scene_changing?
  6.   end
  7.  
  8.  
  9.   def update_call_task
  10.     if $game_system.menu_disabled || $game_map.interpreter.running?
  11.       @task_calling = false
  12.     else
  13.       @task_calling ||= Input.trigger?(:X)
  14.       SceneManager.call(Scene_Tan_Task) if @task_calling && !$game_player.moving?
  15.     end
  16.   end
  17. end

进游戏发现按下A可以进入界面,但Esc退出来瞬间又会进入该界面,百思不得其解。
然后发现@task_calling ||= Input.trigger?(:X)这句里的||=看不太懂,去百度了下发现"a ||= b"的展开式为: "if a then a else a = b end"
还是看不懂...
但是感觉直接写成@task_calling = Input.trigger?(:X)好像还挺说得通的,就去掉了||,进游戏发现还真的就没问题了。。。

可问题是我这个写法是直接抄call_menu语句里的啊,为什么它用 ||= 就没事,我就一定要用=才会没问题?
@task_calling ||= Input.trigger?(:X)这句话到底执行的是什么内容?
作者: taroxd    时间: 2015-8-15 15:21
@menu_calling ||= Input.trigger?(:B)
是指如果原来 @menu_calling 不为真,而且按下了B键,就将 @menu_calling 设为真。如果原来就是真,那么不做改动。

默认脚本没问题是因为在进入场景(Scene_Map#start)的时候就把 @menu_calling 设为 false 了。也就是说,从菜单返回地图后 @menu_calling 是 false。
作者: acv255    时间: 2015-8-15 15:27
taroxd 发表于 2015-8-15 15:21
@menu_calling ||= Input.trigger?(:B)
是指如果原来 @menu_calling 不为真,而且按下了B键,就将 @menu_ca ...

这么看来好像效果跟@task_calling = Input.trigger?(:X)并没有什么区别吧?
为什么要这么写呢




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