Project1

标题: 如何做到从大地图进入某地,返回时其他事件位置啥的不变 [打印本页]

作者: 刺夜之枪    时间: 2014-4-17 14:39
标题: 如何做到从大地图进入某地,返回时其他事件位置啥的不变
XP, 有个主世界地图。
进入某个城市后,返回后一切不变。
要保存什么数据是吧。
求指点一下,搜索过了。
求具体操作。感激不尽

作者: RyanBern    时间: 2014-4-17 14:39
本帖最后由 RyanBern 于 2014-4-18 13:44 编辑

做了一个,去试试有没有错误吧。我这里应该没有。
  1. #=============================================================================
  2. # 简易地图记忆功能
  3. #-----------------------------------------------------------------------------
  4. # By:RyanBern
  5. #=============================================================================

  6. #=============================================================================
  7. # 说明
  8. #-----------------------------------------------------------------------------
  9. # 切换地图后,重新进入地图会重新装载一遍地图,导致事件还在原位。这里经过简单
  10. # 修改可使得某些地图的事件位置信息会保存下来。
  11. #=============================================================================

  12. # 需要记忆的地图 ID,如果需要记忆1号地图和2号地图,就在方括号里面输入1,2
  13. # 例如 MAPS_NEED_MEMORIZE = [1,2]
  14. MAPS_NEED_MEMORIZE = []

  15. # 用于储存所记忆地图的变量 ID,这是为了地图信息能保存到下次读档之后,注意,一
  16. # 旦设置了某变量用于记忆地图,则此变量不可作为他用(即不能出现在事件操作或者
  17. # 事件出现条件中)。例如,将1号变量用于储存记忆地图,则写 MEMORIZED_POS = 1
  18. MEMORIZED_POS = 1

  19. class Game_Map
  20.   alias ryan_setup setup
  21.   def setup(map_id)
  22.     unless $game_variables[MEMORIZED_POS].is_a?(Hash)
  23.       $game_variables[MEMORIZED_POS] = {}
  24.     end
  25.     if MAPS_NEED_MEMORIZE.include?($game_map.map_id)
  26.       $game_variables[MEMORIZED_POS][$game_map.map_id] = $game_map.clone
  27.     end
  28.     if $game_variables[MEMORIZED_POS].include?(map_id)
  29.       $game_map = $game_variables[MEMORIZED_POS][map_id]
  30.       return
  31.     end
  32.     ryan_setup(map_id)
  33.   end
  34. end
复制代码

作者: 日月星辰    时间: 2014-4-17 19:33
本帖最后由 日月星辰 于 2014-4-17 19:35 编辑

lz为什么我测试结果。。继续进行游戏后,返回原来地图时,事件都是在原来的位置?
但如果是存档的话,读取存档后,事件会在存档时的位置
作者: 天使喝可乐    时间: 2014-4-17 21:01
输入“#$game_temp.lv_switches = false” 就可以启用保留事件位置的功能了
不过,和脚本无关——实际使用时表示保留事件位置会有坏处,比如之前设置好自定义路线的NPC,会在你记录的当前位置重新开始按路线移动,那么时间一长一定会卡住。

RUBY 代码复制
  1. #$game_temp.lv_switches = true  禁用
  2. #$game_temp.lv_switches = false 启用
  3.  
  4. class Game_Map
  5. alias old_setup setup
  6. def setup(jiong)
  7.    if @lv_x == nil
  8.      @lv_x = []
  9.      @lv_y = []
  10.      @lv_direction = []
  11.    end
  12.    if @lv_x[jiong]==nil
  13.        @lv_x[jiong]=[]
  14.        @lv_y[jiong]=[]
  15.        @lv_direction[jiong]=[]
  16.    end
  17.    old_setup(jiong)
  18. end
  19. def lv_x(one,two)
  20.    return @lv_x[one][two]
  21. end
  22. def lv_y(one,two)
  23.    return @lv_y[one][two]
  24. end
  25. def lv_x2(one,two,three)
  26.    @lv_x[one][two]=three
  27. end
  28. def lv_y2(one,two,three)
  29.    @lv_y[one][two]=three
  30. end
  31. def lv_direction(one,two)
  32.    return @lv_direction[one][two]
  33. end
  34. def lv_direction2(one,two,three)
  35.    @lv_direction[one][two]=three
  36. end
  37. end
  38.  
  39.  
  40. class Game_Event
  41. attr_reader   :id
  42. attr_reader   :map_id
  43. alias old_update update
  44. def update
  45.    old_update
  46.    $game_map.lv_x2(@map_id,@id,self.x)
  47.    $game_map.lv_y2(@map_id,@id,self.y)
  48.    $game_map.lv_direction2(@map_id,@id,self.direction)
  49. end
  50. def initialize(map_id, event)
  51.    super()
  52.    @map_id = map_id
  53.    @event = event
  54.    @id = @event.id
  55.    @erased = false
  56.    @starting = false
  57.    @through = true
  58.    if $game_map.lv_x(@map_id,@id)!=nil and !$game_temp.lv_switches
  59.      @event.x = $game_map.lv_x(@map_id,@id)
  60.      @event.y = $game_map.lv_y(@map_id,@id)
  61.      @direction = $game_map.lv_direction(@map_id,@id)
  62.    end
  63.    moveto(@event.x, @event.y)
  64.    refresh
  65. end
  66. end
  67. class Game_Temp
  68. attr_accessor :lv_switches
  69. end

作者: yang1zhi    时间: 2014-4-17 23:51
会变的吗?




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