19、场景类

原创:夏克  发表时间:2005-6-3 2:52:20  点击次数:247

   
无论地图画面还是菜单画面等等,担任各画面的处理的是场面类。 
把所有的场面类列个表,类名和脚本名一一对应。还有,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 刚才也已提出了。

剩下的 4 行,担当标题画面的处理的 Scene_Title 类的实例,生成全局变量 $scene 。
版权声明:RUBY文档中心的所有文章标明[原创]的均为本站作品,版权属RUBY中文化计划,若转载请注明;标明[翻译]的其外文版权归原作者,译文版权属RUBY中文化计划;标明[转贴]的,若原作者感到侵犯了他的著作权,那么请及时跟主持人联系,我们会尽快更正。
 

 

 

版权所有(C) RUBY中文化计划