Project1

标题: 如何获取切换到某一个场景之前的场景? [打印本页]

作者: 有丘直方    时间: 2016-1-27 16:54
标题: 如何获取切换到某一个场景之前的场景?
本帖最后由 有丘直方 于 2016-1-27 16:58 编辑

这里我做了一个场景,在这个场景下按下B键可以返回到原来的场景。任何一个场景都可以切换到这个场景,如果在这个场景的initialize的定义中弄一堆的参数判断原来的场景并且在每一个其他的场景中都加入一个切换到这个场景的方法,那要多麻烦啊!
于是我就想要知道获取切换到这个场景之前的场景的方法。
我首先自己琢磨着想一个办法。我在Main中改,把
RGSS2 代码复制
  1. $scene.main while $scene != nil
改成
RGSS2 代码复制
  1. while $scene != nil
  2.     $scene.main
  3.     $last_scene = $scene if $scene != Scene_********.new
  4.   end
,然后在我自己做的那个场景的return_scene的方法定义成
  1. $scene = $last_scene
复制代码
,结果没有成功……
请问有没有什么办法可以做到这个?
作者: Password    时间: 2016-1-27 18:15
如果是我的话……我只会比较简单粗暴地弄个全局变量,然后不同场景对应不同的值,返回时判断这个值。
作者: 有丘直方    时间: 2016-1-27 18:33
Password 发表于 2016-1-27 18:15
如果是我的话……我只会比较简单粗暴地弄个全局变量,然后不同场景对应不同的值,返回时判断这个值。 ...

虽然这个方法可行,但是和我说的第一个方法一样,它需要在每一个场景中都代入一次变量,还是比较麻烦的。
作者: 喵呜喵5    时间: 2016-1-27 18:50
本帖最后由 喵呜喵5 于 2016-1-27 18:51 编辑
  1. $last_scene = []
复制代码
  1.   while $scene != nil
  2.     if $last_scene[-1] != $scene
  3.       $last_scene.push($scene)
  4.     end
  5.     $scene.main   
  6.   end
复制代码
  1. def return_scene
  2.   $last_scene.pop
  3.   $scene = $last_scene.pop
  4. end
复制代码
未测试
作者: 有丘直方    时间: 2016-1-27 19:18
喵呜喵5 发表于 2016-1-27 18:50
未测试

谢谢,我试一下。
作者: 有丘直方    时间: 2016-1-27 19:39
喵呜喵5 发表于 2016-1-27 18:50
未测试
  1. #==============================================================================
  2. # ■ Main
  3. #------------------------------------------------------------------------------
  4. #  各定义结束后,从这里开始实际处理。
  5. #==============================================================================

  6. # 一些常用的字体
  7. Font.default_name = ["SimHei", "华文隶书", "DFKai-SB", "標楷體", "Verdana", "Arial Unicode MS"]
  8. begin
  9.   Graphics.freeze
  10.   $scene = Scene_Loading.new
  11.   $last_scene = []
  12.   while $scene != nil
  13.     if $last_scene[-1] != $scene
  14.       $last_scene.push($scene)
  15.     end
  16.     $scene.main   
  17.   end
  18.   Graphics.transition(30)
  19. rescue Errno::ENOENT
  20.   filename = $!.message.sub("你看看,这个文件是不是没有了——", "")
  21.   print("紧急!#{filename}找不到了怎么办!")
  22. end
复制代码
进入Scene_Map场景后进入调用了刚刚提到的return_scene方法的类之后发生了以下错误:
脚本 'Main' 的第 14 行发生了 NoMethodError .
undefined method '[]' for #<Scene_Map:0xa4b8a38>

请问怎么解决?
作者: 喵呜喵5    时间: 2016-1-27 19:49
有丘直方 发表于 2016-1-27 19:39
进入Scene_Map场景后进入调用了刚刚提到的return_scene方法的类之后发生了以下错误:

请问怎么解决? ...

你不附上 return_scene 的定义我怎么知道怎么解决……?
作者: 有丘直方    时间: 2016-1-27 19:54
喵呜喵5 发表于 2016-1-27 19:49
你不附上 return_scene 的定义我怎么知道怎么解决……?

呃呃呃。
  1.   #--------------------------------------------------------------------------
  2.   # ● 回到原画面
  3.   #--------------------------------------------------------------------------
  4.   def return_scene
  5.     if @from_title
  6.       $scene = Scene_Title.new
  7.     elsif @from_end
  8.       $scene = Scene_End.new
  9.     elsif @from_gameover
  10.       $scene = Scene_Gameover.new
  11.     elsif @from_event
  12.       $scene = Scene_Map.new
  13.     else
  14.       $last_scene.pop
  15.       $scene = $last_scene.pop
  16.     end
  17.   end
复制代码
抱歉,附上了。
作者: 喵呜喵5    时间: 2016-1-27 20:01
有丘直方 发表于 2016-1-27 19:54
呃呃呃。抱歉,附上了。

全局搜索一下 $last_scene ,看看还有没有别的地方定义了之后你没删干净
作者: 有丘直方    时间: 2016-1-27 20:04
喵呜喵5 发表于 2016-1-27 20:01
全局搜索一下 $last_scene ,看看还有没有别的地方定义了之后你没删干净

噢!在Scene_Map发现一个有关它的变量代入,是我上次试的时候弄的,没删掉。
删掉之后应该好了。谢谢提醒!
(话说一次次输入验证码真麻烦)




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1