查看: 2390|回复: 4

[已经解决] 光标为什么不能停留在窗口上

[复制链接]
梦石
0
星屑
4761
在线时间
285 小时
注册时间
2013-10-13
回帖
580
发表于 2016-3-15 22:55:03 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 RyanBern 于 2016-3-16 14:02 编辑

为什么默认脚本按了C键后,光标依然能出现在状态窗口上,不会自动进入“装备窗口”上;而我的脚本却按了C键后,光标不会停留出现在状态窗口上,而是自动进入“装备窗口”上?
具体地说,就是:
在默认脚本和我的脚本同个位置添加“p "000"”,同样按C键后,默认脚本光标出现在状态窗口上,需要继续按C键,才会出现“"000"”然后进入“装备窗口”,而我的脚本却先出现“"000"”然后无须再按C键就自动进入“装备窗口”。
我想知道,为什么默认脚本能作到按C键后,不会先出现“p "000"”并且光标出现在状态窗口上,需要继续按C键,才会出现“"000"”然后进入“装备窗口”?
[pre lang="Ruby"]
  def update_status
    #如果按B键
    if Input.trigger?(Input::B)
      #命令窗口激活
      @window_commond.active = true
      #状态窗口熄灭
      @status_window.active  = false
      #状态窗口光标
      @status_window.index  = -1
    end
    #如果按C键
    if Input.trigger?(Input::C)
      case @window_commond.index
        when 0
          p "000"
          #切换到装备画面
          $scene = Scene_Equip.new
      end
    end
  end
[/pre]
梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2016-3-15 23:24:39 | 显示全部楼层
@status_window.index这个是光标位置,第一个是0,之后每个加1

点评

我去思考下,等再弄清 来反馈!  发表于 2016-3-16 00:03
哦,我也试了,结果是 光标只能作用于 第一个人物,其他人物光标不起作用!  发表于 2016-3-16 00:02
默认脚本返回是有设置返回到哪个.index  发表于 2016-3-16 00:00
我是说你的脚本里被你改了这个地方  发表于 2016-3-15 23:59
你误解我意思了。我改了脚本,我设定第一个位置 是 装备  发表于 2016-3-15 23:43
回复

使用道具 举报

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2016-3-15 23:34:14 | 显示全部楼层
因为你的脚本在update_command(无误?)方法里按下C键的场合直接转到装备界面了……
回复

使用道具 举报

梦石
0
星屑
4761
在线时间
285 小时
注册时间
2013-10-13
回帖
580
 楼主| 发表于 2016-3-15 23:42:23 | 显示全部楼层
“因为你的脚本在update_command(无误?)方法里按下C键的场合直接转到装备界面了……”
——从来就没有!我试过了,把$scene = Scene_Equip.new删除掉,光标可以在 命令窗口 和 状态 窗口 之间 自由切换的。

评分

参与人数 1星屑 +66 收起 理由
cinderelmini + 66 TvT……窝看错了…………

查看全部评分

回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2016-3-16 14:00:39 | 显示全部楼层
似乎是这个问题@cinderelmini
update方法在判断按键的时候,后面必须跟return,否则会连续判断,效果就和连点差不多。
[pre lang="Ruby"]def update
  if @command_window.active
    update_command
  end
  if @status_window.active
    update_status
  end
  # other updates
end
def update_command
  if Input.trigger?(Input::C)
    # deactivate command window and activate status window
  end
  # other input events
end
def update_status
  if Input.trigger?(Input::C)
    case @window_commond.index
    when 0
      #切换到装备画面
      $scene = Scene_Equip.new
    end
  end
end
[/pre]
脚本这样写是不对的,当按下C键的时候,update_command和update_window会同时判断(因为这出现在同一次update中),因此会出现连点效果。

解决办法就是每次update之后要及时return掉,这样才不会进行后面的判断。
[pre lang="Ruby"]def update
  if @command_window.active
    update_command
    return # <- 'return' can't be ignored
  end
  if @status_window.active
    update_status
    return # <- 'return' can't be ignored
  end
end[/pre]
同样,update_status的每个按键分歧,最好都要在末尾return一下。防止玩家同时按下两个按键。

点评

终于明白是什么意思了  发表于 2016-3-16 17:10
...因此,Input.trigger?(Input::C)的判定依然生效。所以会产生连点效果。  发表于 2016-3-16 17:08
return的含义是结束当前方法执行。如果不写这句的话update就会继续判断,这样的话自动执行update_status,此时在同一次刷新中,因此...  发表于 2016-3-16 17:06
我现在知道是return,可是不知道为什么  发表于 2016-3-16 17:02
居然是这个问题…………  发表于 2016-3-16 16:56
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部