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

Project1

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

[已经解决] 如何让主角前往特地区域位置后,事件开始移动接触主角?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2013-9-19
帖子
56
跳转到指定楼层
1
发表于 2014-7-23 11:53:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
就像是可以看到一样,走到特定的地方,事件看到主角,会追过来砍他。
如何做到?
.

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2013-9-19
帖子
56
7
 楼主| 发表于 2014-7-24 21:32:58 | 只看该作者
越前リョーマ 发表于 2014-7-23 23:08
上面说的这做法不对,或者说,局限性太高。

事件来制作的话,利用VA强大的特性【区域】。

谢谢!这个实用!我要好好琢磨琢磨....
.
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22713
在线时间
8623 小时
注册时间
2011-12-31
帖子
3367
6
发表于 2014-7-23 23:18:28 | 只看该作者
イベントの接触範囲を拡大
経路探索VXAce
這一類的脚本都可做到
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

5
发表于 2014-7-23 23:08:03 | 只看该作者
本帖最后由 越前リョーマ 于 2014-7-23 23:12 编辑

上面说的这做法不对,或者说,局限性太高。

事件来制作的话,利用VA强大的特性【区域】。
首先我们在你需要的地方画上区域,比如1号吧。
新建一个事件,并行处理,变量1=主角x,变量2=主角y。然后加入事件指令的第三页-地图-获取指定位置的信息-区域ID,下方变量为变量1变量2,这个信息存储在变量3里。条件分歧变量3=1(我们画的区域编号),那么就是进入这个区域了,你可以打开一个开关。然后敌人就会来追主角了,条件分歧开关打开时。

点评

如果让事件接近主角呢,这里在那个事件里再新建一个事件页,移动为接近主角,条件为开关打开  发表于 2014-7-23 23:09

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 我就说我不会事件=。=

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
19 小时
注册时间
2013-12-8
帖子
47
4
发表于 2014-7-23 14:51:36 手机端发表。 | 只看该作者
H·H·Y 发表于 2014-7-23 11:58
两种方法:
1.在范围边缘放上与主角接触就打开开关的事件
2.并行处理的事件用变量读取主角的XY坐标,然后条 ...

推荐lz第一个更加好操作,但就麻烦在战斗胜利后事件的消除,其实也不麻烦,只不过是相对整个事件而言麻烦

点评

看喜好吧……公共事件我都喜欢用来作事件系统  发表于 2014-7-23 15:25
为何不放在公共事件里?像这种重复可能性很高,有可以用公共事件做的东西我一般都丢到公共事件里。  发表于 2014-7-23 15:23
一个事件弄好之后就全部复制粘贴其实也不麻烦。  发表于 2014-7-23 15:20
战斗胜利后事件的消除只要用暂时消除事件即可,如果是不希望会再次出现的话用独立开关。  发表于 2014-7-23 14:53
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

3
发表于 2014-7-23 13:25:33 | 只看该作者
看不懂就用楼上的

RUBY 代码复制
  1. =begin
  2.       RGSS3
  3.       
  4.       ★ シンボルエンカウント補助 ★
  5.  
  6.       イベントでのシンボルエンカウントの動作を補助します。
  7.       
  8.       ● 仕様 ●==========================================================
  9.       シンボルエンカウント有効後は、
  10.       イベントページの自律移動の項で設定されたものは全て無効になります。
  11.       --------------------------------------------------------------------
  12.       一度有効になったシンボルエンカウントを無効にするには、
  13.       シンボルエンカウント設定のないイベントページに切り替えてください。
  14.       ====================================================================
  15.       
  16.       ● 機能 ●==========================================================
  17.       シンボルエンカウントイベントから戦闘を起動した場合、
  18.       シンボルとプレイヤーの位置関係により先制攻撃or不意打ちが発生します。
  19.           ・イベントの背後を取った場合           => 先制攻撃
  20.           ・イベントに背後を取られた場合         => 不意打ち
  21.           ・イベントが隊列の最後尾に接触した場合 => 不意打ち
  22.       --------------------------------------------------------------------
  23.       プレイヤーとの距離が一定内になるとプレイヤーを追跡するようになります。
  24.       --------------------------------------------------------------------
  25.       プレイヤーとの距離によりシンボルの透明度を変化させることができます。
  26.       --------------------------------------------------------------------
  27.       プレイヤーのレベルによりシンボルが逃走したりします。
  28.       --------------------------------------------------------------------
  29.       ダッシュしているとシンボルが反応しやすくなったりします。
  30.       --------------------------------------------------------------------
  31.       シンボルが反応した瞬間フキダシアイコンが表示されたりします。
  32.       --------------------------------------------------------------------
  33.       シンボルが反応しなくなるアイテムやスキルを作ることができます。
  34.       --------------------------------------------------------------------
  35.       シンボルが通行できないリージョンを設定することができます。
  36.       ====================================================================
  37.       
  38.       ● シンボルエンカウントイベントの設定方法 ●========================
  39.       シンボルの動作を設定箇所にてあらかじめ定義しておきます。
  40.       --------------------------------------------------------------------
  41.       イベント>自律移動>頻度を最高に設定してください。
  42.       --------------------------------------------------------------------
  43.       イベント>自律移動>カスタム>移動ルート>スクリプトに
  44.         enable_symbol_encount(id)
  45.       と記述します。idには設定箇所で定義したものを指定します。
  46.       --------------------------------------------------------------------
  47.       後はイベントのトリガーを"イベントから接触"にして戦闘を起動するだけ!
  48.       ====================================================================
  49.       
  50.       ● ステルス機能について ●==========================================
  51.       メモ欄に「ステルス:n」と記述されたスキル・アイテムを使用すると
  52.       ステルス状態となり、一定期間シンボルが反応しなくなります。
  53.       nにはステルス状態が維持されるプレイヤーの歩数を指定します。
  54.       --------------------------------------------------------------------
  55.       イベントのスクリプトから下記のコードを実行することで、
  56.       ステルスを強制的に解除することができます。
  57.         reset_stealth
  58.       --------------------------------------------------------------------
  59.       操作キャラクターの変更時や、シナリオ上で長い時間が経過した際などに
  60.       使用してください。
  61.       ====================================================================
  62.       
  63.       ● 注意 ●==========================================================
  64.       ニューゲームから始めないとエラーを吐きます。
  65.       ====================================================================
  66.       
  67.       ver1.01
  68.  
  69.       Last Update : 2012/03/04
  70.       03/04 : 追跡中のイベントが存在する際にイベントが発生すると、
  71.               追跡状態がおかしくなる不具合を修正
  72.       ----------------------2012--------------------------
  73.       12/23 : RGSS2からの移植
  74.       ----------------------2011--------------------------
  75.       
  76.       ろかん   [url]http://kaisou-ryouiki.sakura.ne.jp/[/url]
  77. =end
  78.  
  79. #===================================
  80. #  ●設定箇所
  81. #===================================
  82. module SymbolEncount
  83.   # 隊列がシンボルと接触した場合、イベントを起動するかどうか
  84.   FOLLOWER_CONTACT = true
  85.  
  86.   # シンボルエンカウントの設定をあらかじめ定義
  87.   SYMBOL_SETTING_LIST = {
  88.     #-----------------------------------------------------------
  89.     0 => [
  90.           # シンボルが逃げるプレイヤーレベル
  91.           #   0が設定されている場合逃走しません
  92.           0,
  93.           # プレイヤーレベルの判断種別
  94.           #   0:平均レベル、1:最大レベル、2:先頭メンバーのレベル
  95.           0,
  96.           # シンボルが反応するプレイヤーとの距離
  97.           3,
  98.           # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  99.           5,
  100.           # プレイヤーに反応していない時の移動パターン
  101.           #   0:ランダム移動、1:停止
  102.           0,
  103.           # 透明度の変化するプレイヤーとの距離
  104.           #   ここで指定した距離よりもシンボルから遠ざかることで
  105.           #   シンボルが少しずつ見えにくくなっていきます。
  106.           #   0が設定されている場合この機能は無効になります。
  107.           5,
  108.           # 反応前の移動速度
  109.           #   1:1/8倍速、2:1/4倍速、3:1/2倍速、4:標準速、5:2倍速、6:4倍速
  110.           2,
  111.           # 反応後の移動速度
  112.           #   1:1/8倍速、2:1/4倍速、3:1/2倍速、4:標準速、5:2倍速、6:4倍速
  113.           4,
  114.           # 反応前の移動頻度
  115.           #   1:最低、2:低、3:通常、4:高、5:最高
  116.           5,
  117.           # 反応後の移動頻度
  118.           #   1:最低、2:低、3:通常、4:高、5:最高
  119.           5,
  120.           # 反応時に再生するフキダシアイコンID
  121.           #   0が設定されている場合この機能は無効になります。
  122.           1,
  123.           # シンボルが通行することのできないリージョンID
  124.           # 配列形式で指定してください。
  125.           [1, 3]
  126.          ],
  127.     #-----------------------------------------------------------
  128.     1 => [
  129.           15,# シンボルが逃げるプレイヤーレベル
  130.           0, # プレイヤーレベルの判断種別
  131.           3, # シンボルが反応するプレイヤーとの距離
  132.           5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  133.           1, # プレイヤーに反応していない時の移動パターン
  134.           0, # 透明度の変化するプレイヤーとの距離
  135.           0, # 反応前の移動速度
  136.           4, # 反応後の移動速度
  137.           0, # 反応前の移動頻度
  138.           5, # 反応後の移動頻度
  139.           1, # 反応時に再生するフキダシアイコンID
  140.           [] # シンボルが移動することのできないリージョンID
  141.          ],
  142.     #-----------------------------------------------------------
  143.     2 => [
  144.           0, # シンボルが逃げるプレイヤーレベル
  145.           0, # プレイヤーレベルの判断種別
  146.           0, # シンボルが反応するプレイヤーとの距離
  147.           0, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  148.           0, # プレイヤーに反応していない時の移動パターン
  149.           0, # 透明度の変化するプレイヤーとの距離
  150.           0, # 反応前の移動速度
  151.           0, # 反応後の移動速度
  152.           0, # 反応前の移動頻度
  153.           0, # 反応後の移動頻度
  154.           0, # 反応時に再生するフキダシアイコンID
  155.           [] # シンボルが移動することのできないリージョンID
  156.          ],
  157.     #-----------------------------------------------------------
  158.     3 => [
  159.           0, # シンボルが逃げるプレイヤーレベル
  160.           0, # プレイヤーレベルの判断種別
  161.           0, # シンボルが反応するプレイヤーとの距離
  162.           0, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  163.           0, # プレイヤーに反応していない時の移動パターン
  164.           0, # 透明度の変化するプレイヤーとの距離
  165.           0, # 反応前の移動速度
  166.           0, # 反応後の移動速度
  167.           0, # 反応前の移動頻度
  168.           0, # 反応後の移動頻度
  169.           0, # 反応時に再生するフキダシアイコンID
  170.           [] # シンボルが移動することのできないリージョンID
  171.          ],
  172.     #-----------------------------------------------------------
  173.   }
  174. end
  175. #===================================
  176. #  ここまで
  177. #===================================
  178.  
  179. $rsi ||= {}
  180. $rsi["シンボルエンカウント補助"] = true
  181.  
  182. class RPG::UsableItem < RPG::BaseItem
  183.   def stealth_obj_count
  184.     self.note.each_line{|line|
  185.       return $1.to_i if line =~ /ステルス:(\d+)/i
  186.     }
  187.     0
  188.   end
  189. end
  190.  
  191. class << BattleManager
  192.   #--------------------------------------------------------------------------
  193.   # ● モジュールのインスタンス変数
  194.   #--------------------------------------------------------------------------
  195.   attr_writer   :run_event
  196.   @run_event = nil # 戦闘を呼び出したイベント
  197.   #--------------------------------------------------------------------------
  198.   # ● セットアップ
  199.   #--------------------------------------------------------------------------
  200.   alias _symbol_encount_setup setup
  201.   def setup(troop_id, can_escape = true, can_lose = false)
  202.     _symbol_encount_setup(troop_id, can_escape, can_lose)
  203.     set_battle_condition
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● シンボルエンカウントイベントから戦闘が呼び出されている場合の処理
  207.   #--------------------------------------------------------------------------
  208.   def set_battle_condition
  209.     if @run_event && @run_event.symbol_encount
  210.       @run_event.set_contact_condition
  211.       case @run_event.contact_condition
  212.       when 1
  213.         @preemptive = true
  214.       when 2
  215.         @surprise = true
  216.       end
  217.     end
  218.     @run_event = nil
  219.   end
  220. end
  221.  
  222. class Game_Actor < Game_Battler
  223.   #--------------------------------------------------------------------------
  224.   # ● スキル/アイテムの使用
  225.   #--------------------------------------------------------------------------
  226.   def use_item(item)
  227.     stealth_effect(item)
  228.     super
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● ステルス効果の適用
  232.   #--------------------------------------------------------------------------
  233.   def stealth_effect(item)
  234.     result = item.stealth_obj_count
  235.     $game_player.stealth_count = result if result > 0
  236.   end
  237. end
  238.  
  239. class Game_Party < Game_Unit
  240.   #--------------------------------------------------------------------------
  241.   # ● プレイヤーレベルの取得
  242.   #--------------------------------------------------------------------------
  243.   def get_player_level(type)
  244.     case type
  245.     when 0
  246.       members.inject(0){|r, actor| r += actor.level} / members.size
  247.     when 1
  248.       members.max_by{|actor| actor.level}
  249.     when 2
  250.       $game_party.members.first.level
  251.     end
  252.   end
  253. end
  254.  
  255. class Game_Character < Game_CharacterBase
  256.   #--------------------------------------------------------------------------
  257.   # ● 非公開メンバ変数の初期化
  258.   #--------------------------------------------------------------------------
  259.   alias _symbol_init_private_members init_private_members
  260.   def init_private_members
  261.     _symbol_init_private_members
  262.     @origin_opacity = @opacity
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ● 移動コマンドの処理
  266.   #--------------------------------------------------------------------------
  267.   alias _symbol_process_move_command process_move_command
  268.   def process_move_command(command)
  269.     params = command.parameters
  270.     @origin_opacity = params[0] if command.code == ROUTE_CHANGE_OPACITY
  271.     _symbol_process_move_command(command)
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● 指定キャラクターとの位置関係を取得(接触していることを前提)
  275.   #--------------------------------------------------------------------------
  276.   def positional_relationship(character)
  277.     if character.real_x == real_x
  278.       character.real_y > real_y ? 1 : 0
  279.     elsif character.real_y == real_y
  280.       character.real_x > real_x ? 2 : 3
  281.     else
  282.       -1
  283.     end
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● シンボルエンカウント関連処理による透明度の更新
  287.   #--------------------------------------------------------------------------
  288.   def update_symbol_opacity
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● フレーム更新
  292.   #--------------------------------------------------------------------------
  293.   alias _symbol_opacity_update update
  294.   def update
  295.     _symbol_opacity_update
  296.     update_symbol_opacity
  297.   end
  298. end
  299.  
  300. class Game_Player < Game_Character
  301.   #--------------------------------------------------------------------------
  302.   # ● 公開インスタンス変数
  303.   #--------------------------------------------------------------------------
  304.   attr_writer :stealth_count
  305.   #--------------------------------------------------------------------------
  306.   # ● 公開メンバ変数の初期化
  307.   #--------------------------------------------------------------------------
  308.   def init_public_members
  309.     super
  310.     reset_stealth
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # ● ステルス状態の初期化
  314.   #--------------------------------------------------------------------------
  315.   def reset_stealth
  316.     @stealth_count = 0
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● ステルス判定
  320.   #--------------------------------------------------------------------------
  321.   def stealth?
  322.     !@stealth_count.zero?
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 歩数増加
  326.   #--------------------------------------------------------------------------
  327.   alias _increase_stealth_count increase_steps
  328.   def increase_steps
  329.     _increase_stealth_count
  330.     @stealth_count -= 1 if stealth?
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● シンボルエンカウント関連処理による透明度の更新
  334.   #--------------------------------------------------------------------------
  335.   def update_symbol_opacity
  336.     if stealth? && !$game_map.interpreter.running?
  337.       @opacity = 128
  338.     else
  339.       @opacity = @origin_opacity
  340.     end
  341.   end
  342. end
  343.  
  344. class Game_Follower < Game_Character
  345.   #--------------------------------------------------------------------------
  346.   # ● 公開インスタンス変数
  347.   #--------------------------------------------------------------------------
  348.   attr_reader :member_index
  349. end
  350.  
  351. class Game_Event < Game_Character
  352.   #--------------------------------------------------------------------------
  353.   # ● インクルード SymbolEncount
  354.   #--------------------------------------------------------------------------
  355.   include SymbolEncount
  356.   #--------------------------------------------------------------------------
  357.   # ● 公開インスタンス変数
  358.   #--------------------------------------------------------------------------
  359.   attr_reader :symbol_encount
  360.   attr_reader :contact_condition
  361.   #--------------------------------------------------------------------------
  362.   # ● 非公開メンバ変数の初期化
  363.   #--------------------------------------------------------------------------
  364.   alias _symbol_encount_ini init_private_members
  365.   def init_private_members
  366.     _symbol_encount_ini
  367.     init_symbol_encount
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ● イベントページのセットアップ
  371.   #--------------------------------------------------------------------------
  372.   alias _symbol_encount_setup_page setup_page
  373.   def setup_page(new_page)
  374.     init_symbol_encount
  375.     _symbol_encount_setup_page(new_page)
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ● シンボルエンカウントの初期化
  379.   #--------------------------------------------------------------------------
  380.   def init_symbol_encount
  381.     @forming = false
  382.     @symbol_encount = false
  383.     @symbol_away_level = 0
  384.     @symbol_away_level_type = 0
  385.     @reaction_distance = 0
  386.     @reaction_distance_with_dash = 0
  387.     @nonreaction_move_type = 0
  388.     @visibility_distance = 0
  389.     @reaction_before_speed = 0
  390.     @reaction_after_speed = 0
  391.     @reaction_before_speed = 0
  392.     @reaction_after_frequency = 0
  393.     @reaction_balloon_id = 0
  394.     @unpassable_region = []
  395.     @contact_index = -1
  396.     @contact_condition = 0
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ● シンボルエンカウントを有効化
  400.   #--------------------------------------------------------------------------
  401.   def enable_symbol_encount(id)
  402.     data = SYMBOL_SETTING_LIST[id]
  403.     @symbol_encount = true
  404.     @symbol_away_level = data[0]
  405.     @symbol_away_level_type = data[1]
  406.     @reaction_distance = data[2]
  407.     @reaction_distance_with_dash = data[3]
  408.     @nonreaction_move_type = data[4]
  409.     @visibility_distance = data[5]
  410.     @reaction_before_speed = data[6]
  411.     @reaction_after_speed = data[7]
  412.     @reaction_before_frequency = data[8]
  413.     @reaction_after_frequency = data[9]
  414.     @reaction_balloon_id = data[10]
  415.     @unpassable_region = data[11].dup
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ● 通行可能判定
  419.   #--------------------------------------------------------------------------
  420.   def passable?(x, y, d)
  421.     if @symbol_encount
  422.       x2 = $game_map.round_x_with_direction(x, d)
  423.       y2 = $game_map.round_y_with_direction(y, d)
  424.       return false if @unpassable_region.include?($game_map.region_id(x2, y2))
  425.     end
  426.     super
  427.   end
  428.   #--------------------------------------------------------------------------
  429.   # ● ロック(実行中のイベントが立ち止まる処理) ※再定義
  430.   #--------------------------------------------------------------------------
  431.   def lock
  432.     unless @locked
  433.       @prelock_direction = @direction
  434.       turn_toward_player unless @symbol_encount
  435.       @locked = true
  436.     end
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ● プレイヤーレベルの取得
  440.   #--------------------------------------------------------------------------
  441.   def player_level
  442.     $game_party.get_player_level(@symbol_away_level_type)
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ● プレイヤーからの距離を取得
  446.   #--------------------------------------------------------------------------
  447.   def distance_from_player
  448.     distance_x_from($game_player.x).abs + distance_y_from($game_player.y).abs
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ● 指定キャラクターからの距離を取得
  452.   #--------------------------------------------------------------------------
  453.   def distance_from_character(character)
  454.     distance_x_from(character.x).abs + distance_y_from(character.y).abs
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ● 反応するプレイヤーからの距離を取得
  458.   #--------------------------------------------------------------------------
  459.   def reaction_distance
  460.     if @forming
  461.       @reaction_distance_with_dash.next
  462.     elsif $game_player.dash? && $game_player.moving?
  463.       @reaction_distance_with_dash
  464.     else
  465.       @reaction_distance
  466.     end
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # ● シンボルエンカウントを動作させるか
  470.   #--------------------------------------------------------------------------
  471.   def active_symbol_encount?
  472.     if $game_map.interpreter.running?
  473.       false
  474.     elsif @erased || $game_player.stealth?
  475.       @forming = false
  476.       false
  477.     else
  478.       true
  479.     end
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ● プレイヤーと同じ方向を向いているか
  483.   #--------------------------------------------------------------------------
  484.   def direction_as_player?
  485.     direction == $game_player.direction
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● 指定キャラクターとの簡易接触判定
  489.   #--------------------------------------------------------------------------
  490.   def contact?(character)
  491.     distance_from_character(character) <= 1
  492.   end
  493.   #--------------------------------------------------------------------------
  494.   # ● プレイヤーへの反応判定
  495.   #--------------------------------------------------------------------------
  496.   def reaction?
  497.     distance_from_player <= reaction_distance
  498.   end
  499.   #--------------------------------------------------------------------------
  500.   # ● プレイヤーからの逃走判定
  501.   #--------------------------------------------------------------------------
  502.   def away?
  503.     player_level > @symbol_away_level
  504.   end
  505.   #--------------------------------------------------------------------------
  506.   # ● 接触状況の判断
  507.   #--------------------------------------------------------------------------
  508.   def set_contact_condition
  509.     @contact_index = -1
  510.     @contact_condition = 0
  511.     if contact?($game_player)
  512.       @contact_index = 0
  513.     elsif FOLLOWER_CONTACT
  514.       $game_player.followers.visible_folloers.each{|follower|
  515.         @contact_index = follower.member_index if contact?(follower)
  516.       }
  517.     end
  518.     if @contact_index.zero?
  519.       @contact_condition = direction_and_positional
  520.     elsif $game_player.followers.visible_folloers.size == @contact_index
  521.       @contact_condition = 2
  522.     else
  523.       @contact_condition = 0
  524.     end
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● プレイヤーとの位置と向き関係から接触状況を取得
  528.   #--------------------------------------------------------------------------
  529.   def direction_and_positional
  530.     position = positional_relationship($game_player)
  531.     if position == -1
  532.       0
  533.     else
  534.       case direction
  535.       when 2
  536.         direction_as_player? ? (position == 0 ? 1 : 2) : 0
  537.       when 4
  538.         direction_as_player? ? (position == 2 ? 1 : 2) : 0
  539.       when 6
  540.         direction_as_player? ? (position == 3 ? 1 : 2) : 0
  541.       when 8
  542.         direction_as_player? ? (position == 1 ? 1 : 2) : 0
  543.       else
  544.         0
  545.       end
  546.     end
  547.   end
  548.   #--------------------------------------------------------------------------
  549.   # ● 接触イベントの起動判定
  550.   #--------------------------------------------------------------------------
  551.   alias _symbol_encount_trigger check_event_trigger_touch
  552.   def check_event_trigger_touch(x, y)
  553.     if @symbol_encount && FOLLOWER_CONTACT
  554.       unless $game_map.interpreter.running?
  555.         if @trigger == 2 && collide_with_player_characters?(x, y)
  556.           start unless jumping?
  557.         end
  558.       end
  559.     else
  560.       _symbol_encount_trigger(x, y)
  561.     end
  562.   end
  563.   #--------------------------------------------------------------------------
  564.   # ● 追跡の開始
  565.   #--------------------------------------------------------------------------
  566.   def start_forming
  567.     @move_speed = @reaction_after_speed
  568.     @move_frequency = @reaction_after_frequency
  569.     unless @reaction_balloon_id.zero?
  570.       Audio.se_play('Audio/SE/Decision1', 50, 150)
  571.       @balloon_id = @reaction_balloon_id
  572.     end
  573.   end
  574.   #--------------------------------------------------------------------------
  575.   # ● 追跡の終了(見失う)
  576.   #--------------------------------------------------------------------------
  577.   def end_forming
  578.     @move_speed = @reaction_before_speed
  579.     @move_frequency = @reaction_before_frequency
  580.   end
  581.   #--------------------------------------------------------------------------
  582.   # ● 反応している時の移動処理
  583.   #--------------------------------------------------------------------------
  584.   def reaction_movement
  585.     @move_speed = @reaction_after_speed
  586.     @move_frequency = @reaction_after_frequency
  587.     if @symbol_away_level.zero?
  588.       move_type_toward_player
  589.     elsif away?
  590.       move_away_from_player
  591.     else
  592.       move_type_toward_player
  593.     end
  594.   end
  595.   #--------------------------------------------------------------------------
  596.   # ● 反応していない時の移動処理
  597.   #--------------------------------------------------------------------------
  598.   def nonreaction_movement
  599.     @move_speed = @reaction_before_speed
  600.     @move_frequency = @reaction_before_frequency
  601.     case @nonreaction_move_type
  602.     when 0
  603.       move_type_random
  604.     when 1
  605.     end
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● フレーム更新
  609.   #--------------------------------------------------------------------------
  610.   alias _update_with_symbol update
  611.   def update
  612.     update_symbol_reaction if @symbol_encount && @wait_count <= 0 && !@move_route_forcing
  613.     _update_with_symbol
  614.   end
  615.   #--------------------------------------------------------------------------
  616.   # ● プレイヤーへの反応判定を更新
  617.   #--------------------------------------------------------------------------
  618.   def update_symbol_reaction
  619.     if active_symbol_encount?
  620.       if !@forming && reaction?
  621.         start_forming
  622.       elsif @forming && !reaction?
  623.         end_forming
  624.       end
  625.       @forming = reaction?
  626.     end
  627.   end
  628.   #--------------------------------------------------------------------------
  629.   # ● シンボルエンカウント関連処理による透明度の更新
  630.   #--------------------------------------------------------------------------
  631.   def update_symbol_opacity
  632.     if @visibility_distance.zero?
  633.       @opacity = @origin_opacity
  634.     else
  635.       @opacity = @origin_opacity - 50 * (distance_from_player - @visibility_distance)
  636.     end
  637.   end
  638.   #--------------------------------------------------------------------------
  639.   # ● 自律移動の更新
  640.   #--------------------------------------------------------------------------
  641.   alias _update_self_movement_with_symbol update_self_movement
  642.   def update_self_movement
  643.     if @symbol_encount
  644.       update_symbol_movement if near_the_screen? && @stop_count > stop_count_threshold
  645.     else
  646.       _update_self_movement_with_symbol
  647.     end
  648.   end
  649.   #--------------------------------------------------------------------------
  650.   # ● シンボルの動作を更新
  651.   #--------------------------------------------------------------------------
  652.   def update_symbol_movement
  653.     if near_the_screen? && @stop_count > stop_count_threshold
  654.       if active_symbol_encount?
  655.         @forming ? reaction_movement : nonreaction_movement
  656.       else
  657.         nonreaction_movement
  658.       end
  659.     end
  660.   end
  661. end
  662.  
  663. class Game_Interpreter
  664.   #--------------------------------------------------------------------------
  665.   # ● バトルの処理
  666.   #--------------------------------------------------------------------------
  667.   alias _command_301_with_symbol_encount command_301
  668.   def command_301
  669.     unless $game_party.in_battle
  670.       BattleManager.run_event = $game_map.events[@event_id]
  671.       _command_301_with_symbol_encount
  672.     end
  673.   end
  674.   #--------------------------------------------------------------------------
  675.   # ● ステルス状態の解除
  676.   #--------------------------------------------------------------------------
  677.   def reset_stealth
  678.     $game_player.reset_stealth
  679.   end
  680. end
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

梦石
0
星屑
2315
在线时间
5539 小时
注册时间
2011-1-10
帖子
6619

青铜编剧史诗剧作家剧作品鉴家

2
发表于 2014-7-23 11:58:13 | 只看该作者
本帖最后由 H·H·Y 于 2014-7-23 15:24 编辑

两种方法:
1.在范围边缘放上与主角接触就打开开关的事件
2.并行处理的事件用变量读取主角的XY坐标,然后条件分歧:当XY坐标超出一个范围之后打开开关

方法1比较方便,但是放多了怕会乱。
方法2比较简洁,但是对于新手来说有点难。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-25 19:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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