设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2096|回复: 2
打印 上一主题 下一主题

[已经过期] 从状态窗口退出时自动选中人物,以及产生的疑问

 关闭 [复制链接]

Lv4.逐梦者

梦石
0
星屑
7288
在线时间
18 小时
注册时间
2009-7-17
帖子
1262
跳转到指定楼层
1
发表于 2009-7-19 11:36:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
当一个队伍有2个人或2个人以上时,你选择状态/技能/装备时,会出现“选择某人激活框”。再选择某个人,这时就进入了某人的具体状态/技能/装备窗口。
而此时你按ESC退出,系统会把整个窗口恢复到你第一次进入菜单界面的初始状态,即没有出现“选择某人激活框”。
个人感觉这样很不方便(当时我并不知道在具体的状态/技能/装备窗口时时可以直接切换人物的,汗……)。我认为 初始菜单-->选择某人激活框-->具体的状态/技能/装备窗口,当我处于第3步时,我按ESC,应该返回的是第2步。于是尝试对这部分内容进行修改。

由于我是刚解除rm系列,前天开始的,所以虽然以前有点lua的脚本经验,但是还是碰到了很多麻烦。
在Scene_Menu里面有个start_actor_selection方法,做的事情就是打开“选择某人激活框”,即第2步。
在Scene_Status里面有个return_scene方法,即是在“具体的状态/技能/装备窗口”中安ESC。
return_scene方法本事只有一行代码:$scene = Scene_Menu.new(3)。即重新创建初始菜单,并让选中框出现在第3个选项(即“状态”)上。

所以此时我认为只需要在return_scene方法里面去调用start_actor_selection方法就好了。就是这样:
def return_scene
   $scene = Scene_Menu.new(3)
   $scene . start_actor_selection
  end
结果报错:
NoMethodError: undefined method  active = ' for nil:NilClass

问题的原因是此时Scene_Menu里面的方法都还没有执行,还没有定义出start_actor_selection 里面所需要的变量。此时可以在$scene . start_actor_selection 前面加一句$scene . start,便不会报错了。但是你会发现你在推出具体状态窗口的一瞬间,确实有个激活框出现,但是瞬间就被刷掉了。

所以我想问的是:
1. Scene_Menu.new的作用应该是产生一个实例,那为什么此时并没有去定义这个实例中应有变量呢。
2. 可以看出虽然此时并没有定义出变量,但是在一个短暂的时间过后,Scene_Menu里的方法却确实被执行了。请问这是怎么样一个过程呢?


=====================分割线=======================
虽然上诉的问题我没有搞明白,但我想出了一个取巧的办法……

在Scene_Status里的return_scene方法中加入一个全局变量。当然此全局变量需要在Scene_Menu中申明。

在Scene_Menu的第一行:
$testtesttest = 1

在Scene_Status里找到return_scene方法
def return_scene
   $scene = Scene_Menu.new(3)
   $testtesttest = 1            #新加的全局变量,表明此时是从状态窗口中返回的
end

再在Scene_Menu里面的
def update_command_selection

    if $testtesttest == 1              #如果是从状态窗口返回的,则自动进入“选择某人激活框”
        start_actor_selection
        $testtesttest = 0
    else
      if Input.trigger?(Input::B)
        Sound.play_cancel
        $scene = Scene_Map.new
      elsif Input.trigger?(Input::C)
        if $game_party.members.size == 0 and @command_window.index < 4
          Sound.play_buzzer
          return
        elsif $game_system.save_disabled and @command_window.index == 4
          Sound.play_buzzer
          return
        end
        Sound.play_decision
        case @command_window.index
        when 0      # 道具
          $scene = Scene_Item.new
        when 1,2,3  # 技能、装备、状态
          start_actor_selection
        when 4      # 保存
          $scene = Scene_File.new(true, false, false)
        when 5      # 结束游戏
          $scene = Scene_End.new
        end
        
      end
    end
  end

Lv2.观梦者

天仙

梦石
0
星屑
625
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

2
发表于 2009-7-19 12:26:24 | 只看该作者
本帖最后由 雪流星 于 2009-7-18 22:27 编辑

其实有一个很方便的方法
你进入技能、状态、装备的场景之後,按L、R键就可以切换角色了......


所以我想问的是:
1. Scene_Menu.new的作用应该是产生一个实例,那为什么此时并没有去定义这个实例中应有变量呢。
2. 可以看出虽然此时并没有定义出变量,但是在一个短暂的时间过后,Scene_Menu里的方法却确实被执行了。请问这是怎么样一个过程呢?

回答:
1. active  = 是 窗口的方法,不是 Scene_Menu的方法,而使用Scene_Menu.new时只是调用 initialize 而已,还没有执行Scene_Menu 的main 方法,所以当中的物件还没有被创建

2. 调用Scene_Menu.new之後,在当前场景的main当中的循环会发现 $scene 已经不是当前场景,而调用本场景的 terminate 等方法来结束,然後才调用 $scene 所指像的场景的 main
请看 Scene_Base 脚本跟 main 脚本
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7288
在线时间
18 小时
注册时间
2009-7-17
帖子
1262
3
 楼主| 发表于 2009-7-19 14:01:30 | 只看该作者
LS的解释的好清楚。。谢谢了,弄明白了
非常感谢:loveliness:
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-27 06:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表