查看: 2831|回复: 9

[已经解决] 关于active

[复制链接]
梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
回帖
155
发表于 2013-8-24 15:34:26 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 九靈 于 2013-8-25 16:26 编辑

Window_Selectable 中
[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    super
    # 可以移动光标的情况下
    if self.active and @item_max > 0 and @Index >= 0
      # 方向键下被按下的情况下
      if Input.repeat?(Input::DOWN)
        # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
        # 或光标位置在(项目数-列数)之前的情况下
        if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
           @index < @item_max - @column_max
          # 光标向下移动
          $game_system.se_play($data_system.cursor_se)
          @index = (@index + @column_max) % @item_max
        end
      end
[/pre]
if self.active and @item_max > 0 and @index >= 0 的self.active 什么时候变成 true 了?
不见self.active = true 这个东西
梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2013-8-24 15:37:56 | 显示全部楼层
本帖最后由 myownroc 于 2013-8-24 15:51 编辑

只要是对象的值是true/false,后面的 = true 是可以省略的,在很多语言中都可以省略.
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
0
星屑
660
在线时间
1286 小时
注册时间
2011-6-14
回帖
3949
发表于 2013-8-24 16:24:45 | 显示全部楼层
默认值是true。
另外,active指定当前的焦点窗口,只有焦点在某个窗口上才能操作此窗口。

评分

参与人数 1星屑 +80 收起 理由
︶ㄣ牛排ぶ + 80 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
回帖
155
 楼主| 发表于 2013-8-24 17:21:38 | 显示全部楼层
本帖最后由 九靈 于 2013-8-24 17:23 编辑
satgo1546 发表于 2013-8-24 16:24
默认值是true。
另外,active指定当前的焦点窗口,只有焦点在某个窗口上才能操作此窗口。 ...


其实我是想问self.active 是如何从false 到true的
Sce_Item 中
  1.   #--------------------------------------------------------------------------
  2.   # ● 刷新画面 (物品窗口被激活的情况下)
  3.   #--------------------------------------------------------------------------
  4.   def update_item
  5.     # 按下 B 键的情况下
  6.     if Input.trigger?(Input::B)
  7.       # 演奏取消 SE
  8.       $game_system.se_play($data_system.cancel_se)
  9.       # 切换到菜单画面
  10.       $scene = Scene_Menu.new(0)
  11.       return
  12.     end
  13.     # 按下 C 键的情况下
  14.     if Input.trigger?(Input::C)
  15.       # 获取物品窗口当前选中的物品数据
  16.       @item = @item_window.item
  17.       # 不使用物品的情况下
  18.       unless @item.is_a?(RPG::Item)
  19.         # 演奏冻结 SE
  20.         $game_system.se_play($data_system.buzzer_se)
  21.         return
  22.       end
  23.       # 不能使用的情况下
  24.       unless $game_party.item_can_use?(@item.id)
  25.         # 演奏冻结 SE
  26.         $game_system.se_play($data_system.buzzer_se)
  27.         return
  28.       end
  29.       # 演奏确定 SE
  30.       $game_system.se_play($data_system.decision_se)
  31.       # 效果范围是我方的情况下
  32.       if @item.scope >= 3
  33.         # 激活目标窗口
  34.         @item_window.active = false
复制代码
@item_window.active = false 之后
  1.   #--------------------------------------------------------------------------
  2.   # ● 刷新画面
  3.   #--------------------------------------------------------------------------
  4.   def update
  5.     # 刷新窗口
  6.     @help_window.update
  7.     @item_window.update
  8.     @target_window.update
  9.     # 物品窗口被激活的情况下: 调用 update_item
  10.     if @item_window.active
  11.       update_item
  12.       return
  13.     end
复制代码
@item_window.update 再到Win_Selective 的self.active (<===从false变成true了)

不过后来想了一下
应该是super 到Window 的update 中把self.active 刷新成true了
话说Window 里有update 吗?
F1 里没写= =
回复

使用道具 举报

梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2013-8-24 17:26:36 | 显示全部楼层
九靈 发表于 2013-8-24 17:21
其实我是想问self.active 是如何从false 到true的
Sce_Item 中@item_window.active = false 之后@item_wi ...

Window有update方法,
在创建实例的时候,active就是true了.

评分

参与人数 1星屑 +80 收起 理由
︶ㄣ牛排ぶ + 80 认可答案

查看全部评分

(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
0
星屑
64
在线时间
4352 小时
注册时间
2007-8-31
回帖
1905
发表于 2013-8-24 17:28:29 | 显示全部楼层
你举得Scene_Item中有赋值呀
默认的142行
@item_window.active = true
我真是王小二过年,一年不如一年。目前正在寻找状态中,努力找回当初的动力!
“底蕴制作者”—asperta最新博客开通!以后将在这里更新制作进度报告!
我的作品官网:http://www.asperta.org/
ASPERTA世界论坛:http://bbs.asperta.org/


回复

使用道具 举报

梦石
0
星屑
49
在线时间
157 小时
注册时间
2013-8-14
回帖
155
 楼主| 发表于 2013-8-24 17:39:04 | 显示全部楼层
asperta 发表于 2013-8-24 17:28
你举得Scene_Item中有赋值呀
默认的142行
@item_window.active = true

不!
执行
  1.     if @item_window.active
  2.       update_item
  3.       return
  4.     end
复制代码
之后return了
之后又
@item_window.update

点评

可能是super的过程中赋值了,没必要研究这么细吧...  发表于 2013-8-24 18:23
回复

使用道具 举报

梦石
0
星屑
64
在线时间
4352 小时
注册时间
2007-8-31
回帖
1905
发表于 2013-8-24 19:00:19 | 显示全部楼层
和super无关
active默认就是true
在 @item_window.active = false 之后别忘了后面还有句 @target_window.active = true
接着就是update_target的事情了
你看def update_target
这里按下取消键Input::B退出目标窗口后,item_window又被激活了

点评

好像...  发表于 2013-8-24 20:51
我真是王小二过年,一年不如一年。目前正在寻找状态中,努力找回当初的动力!
“底蕴制作者”—asperta最新博客开通!以后将在这里更新制作进度报告!
我的作品官网:http://www.asperta.org/
ASPERTA世界论坛:http://bbs.asperta.org/


回复

使用道具 举报

梦石
0
星屑
34467
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2013-8-25 13:11:10 | 显示全部楼层
@item_window.active

貌似用作条件判断才能这样,而并不是改变其开/闭状态。

比如:if @item_window.active   #物品窗口激活的情况下。
      等同于:if @item_window.active ==true
      unless @item_window.active    #在物品窗口激活以外的情况下。
      等同于:unless @item_window.active == true
              或: if @item_window.active == false

要改变其开/闭状态,才是:

@item_window.active = true
或
@item_window.active = false
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
122
在线时间
552 小时
注册时间
2012-8-18
回帖
1392
发表于 2013-8-25 15:32:53 | 显示全部楼层
在Window的initialize过程中,active在被定义的时候就已经默认为true,Window_Selectable的initialize的super过程最终会调用Window的initialize,就是这样嗯
其实阁下要明白,有一些东西默认值并不是像开关和变量一样的是false和0

点评

因为F1给的资料不全= =  发表于 2013-8-25 16:17
嗯...努力理解中...  发表于 2013-8-25 16:16
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部