Project1

标题: 求助,请问在XP中能不能做个一直跟着主角的人。 [打印本页]

作者: chongbb    时间: 2012-5-17 19:16
标题: 求助,请问在XP中能不能做个一直跟着主角的人。
就是做个人物一直跟着主角走,在主角需要的时候,可以跟主角对话的那种。
dsu_plus_rewardpost_czw
作者: Luciffer    时间: 2012-5-17 19:21
设置事件,自定义移动路线:接近主角,记得调整移动频率和速度
作者: orzfly    时间: 2012-5-17 19:26
Luciffer 发表于 2012-5-17 19:21
设置事件,自定义移动路线:接近主角,记得调整移动频率和速度

读一读脚本里面的接近主角会发现这里有 1/5 的概率为随机移动……
作者: chongbb    时间: 2012-5-17 19:43
Luciffer 发表于 2012-5-17 19:21
设置事件,自定义移动路线:接近主角,记得调整移动频率和速度

再问一句 跟着主角的人,能不能跟着他一起进入下个图片啊?还是需要另外设置一个人呢?
作者: lrq20000421    时间: 2012-5-17 19:52
chongbb 发表于 2012-5-17 19:43
再问一句 跟着主角的人,能不能跟着他一起进入下个图片啊?还是需要另外设置一个人呢? ...

每个图都做一个事件吧,我是脚本盲。
作者: lanyaolove    时间: 2012-5-17 20:02
请使用人物跟随脚本
作者: sai90306    时间: 2012-5-17 20:51
本帖最后由 sai90306 于 2012-5-17 20:56 编辑

可以用美獸大人的提取放置物腳本(以下這是我向hys大大請教後做一點修改的的版本)
  1. #=begin
  2. #==============================================================================
  3. # ☆★☆ 提取放置物腳本(強化) ☆★☆
  4. #------------------------------------------------------------------------------
  5. # - 美獸
  6. # - 2007.4.12
  7. #------------------------------------------------------------------------------
  8. #  愛護環境,人人有責,現實中切勿亂丟垃圾。
  9. #------------------------------------------------------------------------------
  10. #------------------------------------------------------------------------------
  11. #  腳本原理:
  12. #  是從倉庫地圖中提取事件,將其拷貝放入指定的位置,
  13. #  依此達成隨時隨地生成新事件的功能,如此可節省大量用RGSS編寫事件所消耗的體力,很多地方寫的
  14. #  很保守,盡量減少衝突幾率。。
  15. #  此為強化版,可實現新事件的保存,但代價是衝突的隨之增大,若只想單純實現ARPG
  16. #  一類的物品掉落,場所移動後便清除,請使用簡潔版。
  17. #------------------------------------------------------------------------------
  18. =begin
  19.                                 Note:

  20. 一:生成物品主方法:
  21.     Drop_Item.make_events(map_id,event_id,item_x,item_y,save=false)
  22.     map_id : 倉庫地圖的ID。
  23.     event_id : 倉庫中對應事件的ID。
  24.     item_x、item_y :新事件的X與Y坐標
  25.     save : 是否存儲標誌;
  26.            默認為false,即不存儲,場所移動等轉換場景後事件會消失;
  27.            true 為存儲,取檔、關機、登火星,返回後事件仍存在。

  28. 二:刪除事件方法:
  29.     事件名若包含"delete"字段,則執行完畢會立即自我清除;
  30.     註:任何事件皆如此。

  31. 三:必掌握語句:
  32.     $game_map.events[@event_id]
  33.     $game_player
  34.     事件的腳本使用,表示「本事件」和「角色」,主要為取得事件的坐標,
  35.     取得「本事件」X與Y坐標:$game_map.events[@event_id].event.x
  36.                             $game_map.events[@event_id].event.y
  37.     取得「角色」X與Y坐標:$game_player.x
  38.                           $game_player.y
  39.     例如,在某事件左側生成2號地圖的2號事件並永久存儲,寫法如下。
  40.     x = $game_map.events[@event_id].event.x
  41.     y = $game_map.events[@event_id].event.y  
  42.     Drop_Item.make_events(2,2,x-1,y,true)
  43.     或
  44.     x = $game_map.events[@event_id].x
  45.     y = $game_map.events[@event_id].y  
  46.     Drop_Item.make_events(2,2,x-1,y,true)

  47. 四:備註:
  48.     此腳本用法十分靈活,種植、建設、捨棄、掉寶等功能都可用以達成。

  49. =end
  50. #==============================================================================


  51. module Drop_Item

  52.   def self.make_events(map_id,event_id,tmap_id,item_x,item_y,save=false)
  53.       return unless self.is_map?
  54.       map = self.map_data_load(map_id)
  55.       temp = Marshal.load(Marshal.dump(map))
  56.       if !$game_system.map_events_number
  57.          $game_system.map_events_number = {}
  58.       end
  59.       sum = $game_system.map_events_number
  60.       $drop_item_target_map_id = tmap_id
  61.       m_id = $drop_item_target_map_id
  62.       sum[m_id] == nil ? sum[m_id] = 2000 : sum[m_id] += 1
  63.       new_event_id = sum[m_id]
  64.       temp.events[event_id].id = new_event_id
  65.       temp.events[event_id].x,temp.events[event_id].y = item_x,item_y
  66.       $game_map.events[new_event_id] = Game_Event.new(m_id,temp.events[event_id])
  67.       if save
  68.          now_map = self.map_data_load(m_id)
  69.          now_map.events[new_event_id] = temp.events[event_id]
  70.          self.map_data_save(m_id,now_map)
  71.       end
  72.       $game_map.events.delete(new_event_id)
  73.       refresh_map
  74.   end

  75.   def self.map_data_init
  76.       for i in 1..999
  77.          begin
  78.            map = load_data(sprintf("Data/Map%03d.rxdata", i))
  79.          rescue Errno::ENOENT
  80.            next
  81.          end
  82.          $game_system.map_data[i] = Marshal.load(Marshal.dump(map))
  83.       end
  84.   end

  85.   def self.map_data_save(map_id,event)
  86.       $game_system.map_data[$drop_item_target_map_id] = event
  87.   end

  88.   def self.map_data_load(map_id)
  89.       if !$game_system.map_data
  90.          $game_system.map_data = {}
  91.          self.map_data_init
  92.       end
  93.       return $game_system.map_data[map_id]
  94.   end

  95.   def self.delete_events(event_id)
  96.       return unless self.is_map?
  97.       $game_map.events.delete(event_id)
  98.       self.refresh_map
  99.   end

  100.   def self.refresh_map
  101.       return unless self.is_map?
  102.       $scene.spriteset.dispose
  103.       $scene.spriteset = Spriteset_Map.new
  104.   end

  105.   def self.is_map?
  106.       (return true) if $scene.is_a?(Scene_Map)
  107.       return false
  108.   end

  109. end

  110. class Game_Map

  111.   def setup(map_id)
  112.       @map_id = map_id
  113.       #@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  114.       @map = Drop_Item.map_data_load(@map_id)
  115.       tileset = $data_tilesets[@map.tileset_id]
  116.       @tileset_name = tileset.tileset_name
  117.       @autotile_names = tileset.autotile_names
  118.       @panorama_name = tileset.panorama_name
  119.       @panorama_hue = tileset.panorama_hue
  120.       @fog_name = tileset.fog_name
  121.       @fog_hue = tileset.fog_hue
  122.       @fog_opacity = tileset.fog_opacity
  123.       @fog_blend_type = tileset.fog_blend_type
  124.       @fog_zoom = tileset.fog_zoom
  125.       @fog_sx = tileset.fog_sx
  126.       @fog_sy = tileset.fog_sy
  127.       @battleback_name = tileset.battleback_name
  128.       @passages = tileset.passages
  129.       @priorities = tileset.priorities
  130.       @terrain_tags = tileset.terrain_tags
  131.       @display_x = 0
  132.       @display_y = 0
  133.       @need_refresh = false
  134.       @events = {}
  135.       for i in @map.events.keys
  136.         @events[i] = Game_Event.new(@map_id, @map.events[i])
  137.       end
  138.       @common_events = {}
  139.       for i in 1...$data_common_events.size
  140.         @common_events[i] = Game_CommonEvent.new(i)
  141.       end
  142.       @fog_ox = 0
  143.       @fog_oy = 0
  144.       @fog_tone = Tone.new(0, 0, 0, 0)
  145.       @fog_tone_target = Tone.new(0, 0, 0, 0)
  146.       @fog_tone_duration = 0
  147.       @fog_opacity_duration = 0
  148.       @fog_opacity_target = 0
  149.       @scroll_direction = 2
  150.       @scroll_rest = 0
  151.       @scroll_speed = 4
  152.   end

  153. end

  154. class Interpreter

  155.   def command_end
  156.       @list = nil
  157.       if @main and @event_id > 0
  158.          if $game_map.events[@event_id].event.name[/delete/].nil?
  159.             $game_map.events[@event_id].unlock
  160.          else
  161.             if $scene.is_a?(Scene_Map)
  162.                Drop_Item.delete_events(@event_id)
  163.                now_map = Drop_Item.map_data_load($drop_item_target_map_id)
  164.                now_map.events.delete(@event_id)
  165.                Drop_Item.map_data_save($drop_item_target_map_id,now_map)
  166.             end
  167.          end
  168.       end
  169.   end

  170. end

  171. class Game_System

  172.   attr_accessor :map_events_number
  173.   attr_accessor :map_data

  174. end

  175. class Scene_Map

  176.   attr_accessor :spriteset

  177. end
  178. #=end
复制代码
請在Game_Event下方插入

然後請在倉庫地圖做一個LZ想要的腳色(包瓜對話內容.跟隨什麼的)

然後在每個進行主角遷移的事件裡面設定腳本
1.刪除現在地圖上的跟隨事件
$game_map.events.delete(跟隨事件的ID)
#跟隨事件的ID = 主角所在地圖上原本的所有事件數量+1
也就是可以寫為
$game_map.events.delete($game_system.map_events_number+1)

2.接著在要一動的目標地圖上建立新跟隨事件:
Drop_Item.make_events(倉庫地圖ID,倉庫地圖裡LZ的那個跟隨事件ID,主角遷移的目標地圖ID,跟隨事件要出現在目標地圖的x座標,跟隨事件要出現在目標地圖的y座標,true)

3.主角的遷移你懂的...遷移的目標和Drop_Item.make_events裡面的"主角遷移的目標地圖ID,跟隨事件要出現在目標地圖的x座標,跟隨事件要出現在目標地圖的y座標"一致

原理就是有一個會跟隨的事件在倉庫地圖裡
每次地圖遷移就將離開的地圖上的跟隨事件刪除
同時從倉庫地圖裡複製出來到目的地的地圖...
���
作者: chongbb    时间: 2012-5-17 20:55
本帖最后由 chongbb 于 2012-5-17 20:57 编辑
sai90306 发表于 2012-5-17 20:51
可以用美獸大人的提取放置物腳本(以下這是我向hys大大請教後做一點修改的的版本)請在Game_Event下方插入

...


万分感谢亲 这个耐心的回答。。无奈我确实是大菜鸟。。完全看不懂。。还没开始接触脚本。。网费亲的一片苦心,深感内疚的说。。




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