ITEEDU

19、场景类

无论地图画面还是菜单画面等等,担任各画面的处理的是场面类。 

把所有的场面类列个表,类名和脚本名一一对应。还有,Scene_File 类作为 Scene_Save 和 Scene_Load 的超级类而定义的这个列表没包含。

类           内容 

Scene_Title  标题画面 

Scene_Map  地图画面 

Scene_Menu  菜单画面 

Scene_Item  条款画面 

Scene_Skill  技能画面 

Scene_Equip  装备画面 

Scene_Status  状态画面 

Scene_Save  储存画面 

Scene_Load  载入画面 

Scene_End 游戏结束画面 

Scene_Battle Battle 战斗画面 

Scene_Shop 商店画面 

Scene_Name  名字输入画面 

Scene_Gameover  游戏结束画面 

Scene_Debug  排除故障程序画面 

场面类的实例由全局变量$scene保存。这个变量能调出main方法,是继续游戏的构造所在。典型的场面类的骨架如下:

   class Scene_Xxxx

    def main

     Graphics.transition

     loop do

      Graphics.update

      Input.update

      update

      if $scene != self

       break

      end

     end

     Graphics.freeze

    end

    def update

    end

   end

Graphics.freeze 和 Graphics.transition参看Graphics类的详细资料。

if $scene != self 就是如果全局变量 $scene 指向的对象不是自己的话,Input.update 是更新游戏 pad和键盘的输入信息的方法。参照 Input 类的详细资料。

我们曾经在前面提到过,RGSS 的游戏的最基本的事情就是下面的行为:

loop do

Graphics.update

end

场面类的 main 方法是从这里变复杂来的,那么看看是怎样变复杂的吧:

Main 脚本是最后的脚本,以上的脚本基本都是全部类的定义,所以实际上,真正脚本的开始实行是从这里,Main 脚本除去注释 , 仅有成为 11 行。

begin

Graphics.freeze

$scene = Scene_Title.new

while $scene != nil

$scene.main

end

Graphics.transition(20)

rescue Errno::ENOENT

filename = $!.message.sub("No such file or directory - ", "")

print(" 文件夹 #{ filename} 没被发现。")

end

所谓 begin .. rescue ..end 是异常处理的语句。

Graphics.freeze 和 Graphics.transition 刚才也已提出了。