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

Project1

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

[已经解决] 关于视野范围

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
86 小时
注册时间
2013-7-17
帖子
61
跳转到指定楼层
1
发表于 2014-7-30 19:33:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 月初雪姬 于 2014-7-31 19:15 编辑

我语死早。。表在意。。
就是在规定范围内。。。诶。。。靠近怪物的话。它就会追过来。。要是离远了。就依旧在那里走来走去怎么做?

点评

那啥。。。。你还是不打算改标题吗?(改了以后XD君帮删这句  发表于 2014-7-31 18:30

评分

参与人数 1星屑 -20 收起 理由
taroxd -20 标题

查看全部评分

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

2
发表于 2014-7-30 19:39:07 | 只看该作者
语死早也请写一个合适的标题,参考本区所有其他帖子

下面的脚本嘛~ 看得懂日语就用吧~

RUBY 代码复制
  1. =begin
  2.       ★シンボルエンカウント補助★
  3.  
  4.       イベントでのシンボルエンカウントの動作を補助します。
  5.  
  6.       ● 仕様 ●==========================================================
  7.       指定したキャラクターは、基本ランダム移動を行い、
  8.       プレイヤーが一定距離内に近づくと、プレイヤーを追跡、
  9.       またプレイヤーレベルによっては逃走をするようになります。
  10.       ====================================================================
  11.       
  12.       ● 使い方 ●========================================================
  13.       イベント>自律移動>カスタム>移動ルート>スクリプトに
  14.           @symbol_encount = [true, n]
  15.       と記述してください。nはシンボルが逃げるプレイヤーのレベルです。
  16.       シンボルを逃がしたくない場合は、nにnilを入れてください。
  17.       --------------------------------------------------------------------
  18.       イベント>自立移動の速度を1/4倍速、頻度を最高にするといい感じの
  19.       動作をするかもしれません。
  20.       ====================================================================
  21.       
  22.       ● 注意 ●==========================================================
  23.       ニューゲームから始めないとエラーを吐きます。
  24.       ====================================================================
  25.       
  26.       ver1.32
  27.  
  28.       Last Update : 2011/12/14
  29.       12/14 : ソースコードの見直し
  30.       ----------------------2011--------------------------
  31.       03/05 : イベントページ切り替えごとにシンボルエンカウント判定をリセットするようにした
  32.             : シンボルイベントの一時削除が正常に機能しなくなる不具合修正
  33.       02/27 : クラスをGame_CharacterからGame_Eventに変更
  34.             : 一度見つかったら反応するプレイヤーとの距離が増加するようになりました
  35.             : 見つかった際にフキダシアイコンとSEを再生する機能の追加
  36.             : ダッシュボタンを押していても移動していなければ反応距離が増加しないようになりました
  37.       ----------------------2010--------------------------
  38.       08/08 : プレイヤーレベルによって、シンボルが逃げる機能を追加
  39.             : 追跡の挙動を少し変更
  40.       05/17 : プレイヤーがダッシュしていると発見されやすくなる機能を追加
  41.       05/06 : 新規
  42.       ----------------------2009--------------------------
  43.       
  44.       ろかん   [url]http://kaisou-ryouiki.sakura.ne.jp/[/url]
  45. =end
  46.  
  47. #===========================================
  48. #   設定箇所
  49. #===========================================
  50. module Rokan
  51. module Symbol_Encount
  52.     # シンボルが反応するプレイヤーとの距離(プレイヤー徒歩時)
  53.     DISTANCE_SYMBOL = 3
  54.     # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  55.     DISTANCE_SYMBOL_DASH = 5
  56.     # 反応後上昇する移動速度値(変化させたくない場合は 0 にしてください)
  57.     SPEED_SYMBOL = 2
  58.  
  59.     # プレイヤーレベルの判定タイプ
  60.     # 0 => メンバーの平均レベル
  61.     # 1 => メンバーの最大レベル
  62.     # 2 => 主人公(先頭キャラ)のレベル
  63.     ESCAPE_SYMBOL_TYPE = 0
  64.  
  65.     # シンボル反応時にフキダシアイコンエフェクトをかけるかどうか
  66.     SE_EFFECT = true
  67. end
  68. end
  69. #===========================================
  70. #   ここまで
  71. #===========================================
  72.  
  73. $rsi ||= {}
  74. $rsi["シンボルエンカウント補助"] = true
  75.  
  76. class Game_Event < Game_Character
  77.   #--------------------------------------------------------------------------
  78.   # ● インクルード Rokan::Symbol_Encount
  79.   #--------------------------------------------------------------------------
  80.   include Rokan::Symbol_Encount
  81.   #--------------------------------------------------------------------------
  82.   # ● オブジェクト初期化
  83.   #--------------------------------------------------------------------------
  84.   alias symbol_encount_initialize initialize
  85.   def initialize(map_id, event)
  86.     symbol_encount_initialize(map_id, event)
  87.     ini_symbol_encount
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● シンボルエンカウント関連初期化
  91.   #--------------------------------------------------------------------------
  92.   def ini_symbol_encount
  93.     @forming = false # 追跡中判定
  94.     @symbol_encount = [false, false]
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● イベントページのセットアップ
  98.   #--------------------------------------------------------------------------
  99.   alias symbol_encount_setup setup
  100.   def setup(new_page)
  101.     ini_symbol_encount
  102.     symbol_encount_setup(new_page)
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● プレイヤーレベルの取得
  106.   #--------------------------------------------------------------------------
  107.   def get_player_level
  108.     n = 0
  109.     case ESCAPE_SYMBOL_TYPE
  110.     when 0
  111.       $game_party.members.each{|i| n += i.level}
  112.       n /= $game_party.members.size
  113.     when 1
  114.       a = []
  115.       $game_party.members.each{|i| a << i.level}
  116.       n = a.max
  117.     when 2
  118.       n = $game_party.members[0].level
  119.     end
  120.     return n
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● プレイヤーからの距離を取得
  124.   #--------------------------------------------------------------------------
  125.   def distance_from_player
  126.     return distance_x_from_player.abs + distance_y_from_player.abs
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● プレイヤーが指定距離内にいるか
  130.   #--------------------------------------------------------------------------
  131.   def distance_symbol
  132.     if @forming
  133.       d = DISTANCE_SYMBOL_DASH.next
  134.     else
  135.       d = $game_player.dash? && $game_player.moving? ? DISTANCE_SYMBOL_DASH : DISTANCE_SYMBOL
  136.     end
  137.     return distance_from_player <= d
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ● シンボルエンカウントを動作させるか
  141.   #--------------------------------------------------------------------------
  142.   def active_symbol_encount?
  143.     # イベント中・一時削除中は動作しない
  144.     if $game_map.interpreter.running?
  145.       return false
  146.     elsif @erased
  147.       @forming = false
  148.       return false
  149.     end
  150.     return true
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● プレイヤーに反応しているか
  154.   #--------------------------------------------------------------------------
  155.   def symbol_encount_forming?
  156.     return false unless active_symbol_encount?
  157.     result = distance_symbol
  158.     unless @forming
  159.       if SE_EFFECT && result
  160.         RPG::SE.new("Decision1", 50, 150).play unless $rsi["フキダシSE"]
  161.         @balloon_id = 1
  162.       end
  163.     end
  164.     @forming = result
  165.     return result
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 追うか逃げるか
  169.   #--------------------------------------------------------------------------
  170.   def toward_or_away?
  171.     if @symbol_encount[1] && get_player_level > @symbol_encount[1]
  172.       move_away_from_player
  173.     else
  174.       move_toward_player
  175.     end
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 自律移動の更新   ※再定義
  179.   #--------------------------------------------------------------------------
  180.   def update_self_movement
  181.     if @stop_count > 30 * (5 - @move_frequency)
  182.       if @symbol_encount[0]
  183.         symbol_encount_forming? ? toward_or_away? : move_type_random  
  184.       else
  185.         case @move_type
  186.         when 1; move_type_random
  187.         when 2; move_type_toward_player
  188.         when 3; move_type_custom
  189.         end
  190.       end
  191.     end
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 移動時の更新   ※再定義
  195.   #--------------------------------------------------------------------------
  196.   def update_move
  197.     distance = @symbol_encount[0] && distance_symbol ?
  198.     2 ** (@move_speed + SPEED_SYMBOL) : 2 ** @move_speed
  199.     distance *= 2 if dash?        # ダッシュ状態ならさらに倍
  200.     @real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
  201.     @real_x = [@real_x + distance, @x * 256].min if @x * 256 > @real_x
  202.     @real_y = [@real_y - distance, @y * 256].max if @y * 256 < @real_y
  203.     @real_y = [@real_y + distance, @y * 256].min if @y * 256 > @real_y
  204.     update_bush_depth unless moving?
  205.     if @walk_anime
  206.       @anime_count += 1.5
  207.     elsif @step_anime
  208.       @anime_count += 1
  209.     end
  210.   end
  211. end

点评

懒得翻译= = 不过挺符合你的要求的。求楼下大神翻译吧。顺便标题快点改了  发表于 2014-7-30 20:00
请问这脚本怎么用呢。。  发表于 2014-7-30 19:51
日语..................  发表于 2014-7-30 19:44

评分

参与人数 1星屑 +1 收起 理由
鑫晴 + 1 差评

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21626
在线时间
9413 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

3
发表于 2014-7-30 20:03:41 | 只看该作者
http://www.atelier-rgss.com/RGSS/System/ACE_SYS03.html

这个脚本可以实现你要求的功能,下载后在下载的范例中找到后直接插入你的游戏即可,不会设置的话也可以查看范例

评分

参与人数 4星屑 +107 收起 理由
taroxd + 100 我很赞同
落月小天魔 + 1 这不是葡文么。。我机翻得时候明明检测到葡.
david_ng223 + 5 塞糖
鑫晴 + 1 一个日文一个英文。。

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
115 小时
注册时间
2012-11-15
帖子
119
4
发表于 2014-7-31 12:57:11 | 只看该作者
3L网址打不开,不知道一不一样....
  1. #==============================================================================
  2. # +++ MOG - Event Sensor Range (v1.0) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # http://www.atelier-rgss.com
  6. #==============================================================================
  7. # Permite que o evento tenha dois comportamentos, de curta distância e de
  8. # longa distância.
  9. #===============================================================================
  10. #
  11. #在事件名里添加<SensorX>(X = 视野范围)
  12. #例子: EV001<Sensor2>
  13. #
  14. #===============================================================================
  15. module MOG_EVENT_SENSOR
  16.   #进入视野以后开启的独立开关
  17.   SENSOR_SELF_SWITCH = "D"
  18. end

  19. #===============================================================================
  20. # ■ GAME EVENT
  21. #===============================================================================
  22. class Game_Event < Game_Character
  23.   
  24.   attr_reader   :sensor_range
  25.   
  26.   #--------------------------------------------------------------------------
  27.   # ● Initialize
  28.   #--------------------------------------------------------------------------            
  29.   alias mog_event_sensor_initialize initialize
  30.   def initialize(map_id, event)
  31.       mog_event_sensor_initialize(map_id, event)
  32.       setup_event_sensor
  33.   end
  34.   
  35.   #--------------------------------------------------------------------------
  36.   # ● Setup Event Sensor
  37.   #--------------------------------------------------------------------------         
  38.   def setup_event_sensor
  39.       @sensor_range =  @event.name =~ /<Sensor(\d+)>/ ? $1.to_i : 0
  40.   end  
  41.   
  42.   #--------------------------------------------------------------------------
  43.   # ● Update
  44.   #--------------------------------------------------------------------------            
  45.   alias mog_event_sensor_update update
  46.   def update
  47.       mog_event_sensor_update
  48.       update_event_sensor
  49.   end  
  50.   
  51.   #--------------------------------------------------------------------------
  52.   # ● Update Sensor
  53.   #--------------------------------------------------------------------------        
  54.   def update_event_sensor
  55.       return if @sensor_range == 0
  56.       distance = ($game_player.x - self.x).abs + ($game_player.y - self.y).abs
  57.       enable   = (distance <= @sensor_range)
  58.       key = [$game_map.map_id, self.id, MOG_EVENT_SENSOR::SENSOR_SELF_SWITCH]
  59.       last_enable = $game_self_switches[key]
  60.       execute_sensor_effect(enable,key) if enable != last_enable
  61.     end

  62.   #--------------------------------------------------------------------------
  63.   # ● Execute_Sensor Effect
  64.   #--------------------------------------------------------------------------            
  65.   def execute_sensor_effect(enable,key)      
  66.       @pattern = 0
  67.       @pattern_count = 0               
  68.       $game_self_switches[key] = enable
  69.       self.refresh
  70.   end
  71.    
  72. end
复制代码

点评

yes  发表于 2014-7-31 18:26
这样就好了?  发表于 2014-7-31 16:47
在事件名里添加<SensorX>(X = 视野范围) 例子: EV001<Sensor2>  发表于 2014-7-31 16:37
怎么用呢?  发表于 2014-7-31 16:30
好吧。。。解决了  发表于 2014-7-31 15:30

评分

参与人数 1星屑 +100 收起 理由
taroxd + 100 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
99
在线时间
900 小时
注册时间
2012-11-13
帖子
893
5
发表于 2014-7-31 18:28:40 | 只看该作者

评分

参与人数 1星屑 +100 收起 理由
taroxd + 100 我很赞同

查看全部评分

废弃
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 15:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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