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

Project1

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

[已经解决] 在什么时候会调用Scene类的main方法

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4481
在线时间
1053 小时
注册时间
2013-3-28
帖子
390

开拓者

跳转到指定楼层
1
发表于 2015-2-28 17:13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
貌似在脚本编辑器里找不到在哪里会调用各种Scene类的各种main方法

点评

游戏未关闭或未报错时,都在调用各场景的主处理。  发表于 2015-2-28 17:16

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

2
发表于 2015-2-28 18:19:30 | 只看该作者
只有一个地方在调用main方法。
在Main组的脚本里面:
RUBY 代码复制
  1. while $scene != nil
  2.   $scene.main
  3. end
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4481
在线时间
1053 小时
注册时间
2013-3-28
帖子
390

开拓者

3
 楼主| 发表于 2015-2-28 21:54:42 | 只看该作者
RyanBern 发表于 2015-2-28 18:19
只有一个地方在调用main方法。
在Main组的脚本里面:
while $scene != nil


那这段脚本在什么时候调用?
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_Map
  8.   #--------------------------------------------------------------------------
  9.   # ● 主处理
  10.   #--------------------------------------------------------------------------
  11.   def main
  12.     # 生成活动块
  13.     @spriteset = Spriteset_Map.new
  14.     # 生成信息窗口
  15.     @message_window = Window_Message.new
  16.     # 执行过渡
  17.     Graphics.transition
  18.     # 主循环
  19.     loop do
  20.       # 刷新游戏画面
  21.       Graphics.update
  22.       # 刷新输入信息
  23.       Input.update
  24.       # 刷新画面
  25.       update
  26.       # 如果画面切换的话就中断循环
  27.       if $scene != self
  28.         break
  29.       end
  30.     end
  31.     # 准备过渡
  32.     Graphics.freeze
  33.     # 释放活动块
  34.     @spriteset.dispose
  35.     # 释放信息窗口
  36.     @message_window.dispose
  37.     # 标题画面切换中的情况下
  38.     if $scene.is_a?(Scene_Title)
  39.       # 淡入淡出画面
  40.       Graphics.transition
  41.       Graphics.freeze
  42.     end
  43.   end
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2015-2-28 22:11:31 | 只看该作者
陈大帅帅帅哥 发表于 2015-2-28 21:54
那这段脚本在什么时候调用?
#====================================================================== ...

在Main组脚本中,如果$scene全局变量不为nil,就进行无限循环。
直到$scene为nil时退出游戏。
当$scene为Scene_Map的实例时,就会执行脚本了。
可以搜索$scene = Scene_Map.new,看看到底在哪调用

评分

参与人数 1星屑 +30 收起 理由
陈大帅帅帅哥 + 30 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4481
在线时间
1053 小时
注册时间
2013-3-28
帖子
390

开拓者

5
 楼主| 发表于 2015-2-28 22:19:36 | 只看该作者
RyanBern 发表于 2015-2-28 22:11
在Main组脚本中,如果$scene全局变量不为nil,就进行无限循环。
直到$scene为nil时退出游戏。
当$scene为 ...


再请问这段在什么情况下调用
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 刷新画面
  3.   #--------------------------------------------------------------------------
  4.   def update
  5.     # 循环
  6.     loop do
  7.       # 按照地图、实例、主角的顺序刷新
  8.       # (本更新顺序不会在满足事件的执行条件下成为给予角色瞬间移动
  9.       #  的机会的重要因素)
  10.       $game_map.update
  11.       $game_system.map_interpreter.update
  12.       $game_player.update
  13.       # 系统 (计时器)、画面刷新
  14.       $game_system.update
  15.       $game_screen.update
  16.       # 如果主角在场所移动中就中断循环
  17.       unless $game_temp.player_transferring
  18.         break
  19.       end
  20.       # 执行场所移动
  21.       transfer_player
  22.       # 处理过渡中的情况下、中断循环
  23.       if $game_temp.transition_processing
  24.         break
  25.       end
  26.     end
  27.     # 刷新活动块
  28.     @spriteset.update
  29.     # 刷新信息窗口
  30.     @message_window.update
  31.     # 游戏结束的情况下
  32.     if $game_temp.gameover
  33.       # 切换的游戏结束画面
  34.       $scene = Scene_Gameover.new
  35.       return
  36.     end
  37.     # 返回标题画面的情况下
  38.     if $game_temp.to_title
  39.       # 切换到标题画面
  40.       $scene = Scene_Title.new
  41.       return
  42.     end
  43.     # 处理过渡中的情况下
  44.     if $game_temp.transition_processing
  45.       # 清除过渡处理中标志
  46.       $game_temp.transition_processing = false
  47.       # 执行过渡
  48.       if $game_temp.transition_name == ""
  49.         Graphics.transition(20)
  50.       else
  51.         Graphics.transition(40, "Graphics/Transitions/" +
  52.           $game_temp.transition_name)
  53.       end
  54.     end
  55.     # 显示信息窗口中的情况下
  56.     if $game_temp.message_window_showing
  57.       return
  58.     end
  59.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  60.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  61.       # 不是在事件执行中或者禁止遇敌中
  62.       unless $game_system.map_interpreter.running? or
  63.              $game_system.encounter_disabled
  64.         # 确定队伍
  65.         n = rand($game_map.encounter_list.size)
  66.         troop_id = $game_map.encounter_list[n]
  67.         # 队伍有效的话
  68.         if $data_troops[troop_id] != nil
  69.           # 设置调用战斗标志
  70.           $game_temp.battle_calling = true
  71.           $game_temp.battle_troop_id = troop_id
  72.           $game_temp.battle_can_escape = true
  73.           $game_temp.battle_can_lose = false
  74.           $game_temp.battle_proc = nil
  75.         end
  76.       end
  77.     end
  78.     # 按下 B 键的情况下
  79.     if Input.trigger?(Input::B)
  80.       # 不是在事件执行中或菜单禁止中
  81.       unless $game_system.map_interpreter.running? or
  82.              $game_system.menu_disabled
  83.         # 设置菜单调用标志以及 SE 演奏
  84.         $game_temp.menu_calling = true
  85.         $game_temp.menu_beep = true
  86.       end
  87.     end
  88.     # 调试模式为 ON 并且按下 F9 键的情况下
  89.     if $DEBUG and Input.press?(Input::F9)
  90.       # 设置调用调试标志
  91.       $game_temp.debug_calling = true
  92.     end
  93.     # 不在主角移动中的情况下
  94.     unless $game_player.moving?
  95.       # 执行各种画面的调用
  96.       if $game_temp.battle_calling
  97.         call_battle
  98.       elsif $game_temp.shop_calling
  99.         call_shop
  100.       elsif $game_temp.name_calling
  101.         call_name
  102.       elsif $game_temp.menu_calling
  103.         call_menu
  104.       elsif $game_temp.save_calling
  105.         call_save
  106.       elsif $game_temp.debug_calling
  107.         call_debug
  108.       end
  109.     end
  110.   end

点评

@RyanBern @H·H·Y 谢谢二位  发表于 2015-3-1 08:40
在前面main的方法中,有一个loop do的循环内会不断调用这个update的方法。  发表于 2015-3-1 00:56
这是Scene_Map的update方法,原则上只要场景是Scene_Map的对象,这个update就会被调用  发表于 2015-2-28 22:26
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 08:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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