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

Project1

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

[已经解决] 求助,请问在XP中能不能做个一直跟着主角的人。

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2012-5-16
帖子
12
跳转到指定楼层
1
发表于 2012-5-17 19:16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
就是做个人物一直跟着主角走,在主角需要的时候,可以跟主角对话的那种。

Lv4.逐梦者 (超级版主)

嗜谎者

梦石
2
星屑
17362
在线时间
3910 小时
注册时间
2010-9-12
帖子
9654

极短25评委极短24评委极短23评委极短22评委极短21评委开拓者

2
发表于 2012-5-17 19:21:23 | 只看该作者
设置事件,自定义移动路线:接近主角,记得调整移动频率和速度
回复

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60819
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

3
发表于 2012-5-17 19:26:54 | 只看该作者
Luciffer 发表于 2012-5-17 19:21
设置事件,自定义移动路线:接近主角,记得调整移动频率和速度

读一读脚本里面的接近主角会发现这里有 1/5 的概率为随机移动……

点评

但是只用简单事件的话实在木办法了。。。咱毕竟脚本盲。。。  发表于 2012-5-17 19:29
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2012-5-16
帖子
12
4
 楼主| 发表于 2012-5-17 19:43:26 | 只看该作者
Luciffer 发表于 2012-5-17 19:21
设置事件,自定义移动路线:接近主角,记得调整移动频率和速度

再问一句 跟着主角的人,能不能跟着他一起进入下个图片啊?还是需要另外设置一个人呢?

点评

另设,在地图转移处设置好,让下一张地图里的那个跟随事件瞬间出现在玩家身旁就好(注意不要让他卡住)  发表于 2012-5-17 19:47
回复

使用道具 举报

Lv4.逐梦者

污染源

梦石
2
星屑
10267
在线时间
2369 小时
注册时间
2012-2-25
帖子
957
5
发表于 2012-5-17 19:52:26 | 只看该作者
chongbb 发表于 2012-5-17 19:43
再问一句 跟着主角的人,能不能跟着他一起进入下个图片啊?还是需要另外设置一个人呢? ...

每个图都做一个事件吧,我是脚本盲。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
94
在线时间
648 小时
注册时间
2009-2-3
帖子
238
6
发表于 2012-5-17 20:02:34 | 只看该作者
请使用人物跟随脚本

点评

不要忽略“随时回头问话”这一点  发表于 2012-5-17 20:05
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2008-11-19
帖子
607
7
发表于 2012-5-17 20:51:54 | 只看该作者
本帖最后由 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座標"一致

原理就是有一個會跟隨的事件在倉庫地圖裡
每次地圖遷移就將離開的地圖上的跟隨事件刪除
同時從倉庫地圖裡複製出來到目的地的地圖...
���
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2012-5-16
帖子
12
8
 楼主| 发表于 2012-5-17 20:55:11 | 只看该作者
本帖最后由 chongbb 于 2012-5-17 20:57 编辑
sai90306 发表于 2012-5-17 20:51
可以用美獸大人的提取放置物腳本(以下這是我向hys大大請教後做一點修改的的版本)請在Game_Event下方插入

...


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

点评

不会怎么使用脚本。。具体怎么操作?  发表于 2012-5-18 00:14
這不需要修改腳本的  发表于 2012-5-17 21:02
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 05:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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