查看: 1659|回复: 2

[已经解决] 按键呼出界面的判定问题

[复制链接]
梦石
3
星屑
75
在线时间
200 小时
注册时间
2008-7-8
回帖
145
发表于 2015-8-15 15:10:16 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
照着Scene_Map里的call_menu语句写了段按键呼出任务界面的脚本
[pre lang="ruby"]class Scene_Map < Scene_Base
  alias x20150815_update_scene update_scene
  def update_scene
    x20150815_update_scene
    update_call_task unless scene_changing?
  end
  
  
  def update_call_task
    if $game_system.menu_disabled || $game_map.interpreter.running?
      @task_calling = false
    else
      @task_calling ||= Input.trigger?(:X)
      SceneManager.call(Scene_Tan_Task) if @task_calling && !$game_player.moving?
    end
  end
end
[/pre]
进游戏发现按下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)这句话到底执行的是什么内容?

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-8-15 15:21:37 | 显示全部楼层
@menu_calling ||= Input.trigger?(:B)
是指如果原来 @menu_calling 不为真,而且按下了B键,就将 @menu_calling 设为真。如果原来就是真,那么不做改动。

默认脚本没问题是因为在进入场景(Scene_Map#start)的时候就把 @menu_calling 设为 false 了。也就是说,从菜单返回地图后 @menu_calling 是 false。

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
3
星屑
75
在线时间
200 小时
注册时间
2008-7-8
回帖
145
 楼主| 发表于 2015-8-15 15:27:22 | 显示全部楼层
taroxd 发表于 2015-8-15 15:21
@menu_calling ||= Input.trigger?(:B)
是指如果原来 @menu_calling 不为真,而且按下了B键,就将 @menu_ca ...

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

点评

防止本来为 true,然后未按键使得变为 false。这么做使得在移动中按下 B 键也可以等到停止后再呼出菜单  发表于 2015-8-15 15:33
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部