Project1

标题: 事件重叠触发事件的问题。。。 [打印本页]

作者: xb370777978    时间: 2013-11-28 14:11
标题: 事件重叠触发事件的问题。。。

我像这样设置了事件之后,发现当狗穿越过陷阱之后不会触发“狗中陷阱”这个开关,
然后不设置陷阱的允许穿透,狗的移动路线是无法穿过事件的。
我想的是主角躲到陷阱之后狗来追逐主角导致踩中地上陷阱之后触发中陷阱事件狗停止移动。
求各种帮忙看看。。。
作者: 1091160905    时间: 2013-11-28 17:41
设置陷阱的通行度 ,F9数据库里
作者: gaogs123456    时间: 2013-11-28 18:20
事件与事件之间绝对无法穿透,不管优先级是最低与最高,只有开启“可穿透”才行。
你把陷阱事件弄成并行处理,事件接触:貌似只对玩家有效,我还没用过那样的,所以不知道有没有效。
我觉得那个播放动画,不要在等待结束在弹对话的好,可以用等待较短的帧。

你可以换成这样的思路呢?
将陷阱处于一条只能笔直通行的道路中,然后设置成小狗到达陷阱的前一格就能触发事件(立即让小狗穿透下前进一步)。

我收集有一个脚本,传感器的脚本(根据设置的距离,在接近玩家后自动开启独立开关的D事件页;每一格算1距离,也就是说拐弯相邻的两格也算2个距离);使用方法,在事件的名称用这样的命令:<SensorX>X就是距离
  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. # - Utilização
  11. # Crie uma página com a condição de ativação Self Switch D, está página será
  12. # usada quando o player estiver perto do evento.
  13. # Defina a area do sensor do evento colocando este nome no evento.
  14. #
  15. # <SensorX>
  16. #
  17. # X = Area do Sensor
  18. #
  19. #===============================================================================
  20. module MOG_EVENT_SENSOR
  21.   #Definição da letra da Self Switch que ativará a página de curta distância.
  22.   SENSOR_SELF_SWITCH = "D"
  23. end

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

  67.   #--------------------------------------------------------------------------
  68.   # ● Execute_Sensor Effect
  69.   #--------------------------------------------------------------------------            
  70.   def execute_sensor_effect(enable,key)      
  71.       @pattern = 0
  72.       @pattern_count = 0               
  73.       $game_self_switches[key] = enable
  74.       self.refresh
  75.   end
  76.    
  77. end

  78. $mog_rgss3_event_sensor = true
复制代码

作者: tan12345    时间: 2013-11-28 19:22
陷阱那个事件,改成并行执行
作者: xb370777978    时间: 2013-11-29 12:07
tan12345 发表于 2013-11-28 19:22
陷阱那个事件,改成并行执行

改成并行没有效果= =那狗直接就穿越陷阱跑过来了。。。
作者: xb370777978    时间: 2013-11-29 12:07
tan12345 发表于 2013-11-28 19:22
陷阱那个事件,改成并行执行

改成并行没有效果= =那狗直接就穿越陷阱跑过来了。。。
作者: xb370777978    时间: 2013-11-29 12:20
gaogs123456 发表于 2013-11-28 18:20
事件与事件之间绝对无法穿透,不管优先级是最低与最高,只有开启“可穿透”才行。
你把陷阱事件弄成并行处 ...

这个脚本用过- -
因为用了之后会导致怪物的行动一顿一顿的- -很不流畅,所以就放弃掉了。。。
这个难在于事件要去触发事件,而非是人物去触发,并行事件的取坐标没效果。。。也不知道是为什么。。。
作者: gaogs123456    时间: 2013-11-30 12:21
本帖最后由 gaogs123456 于 2013-11-30 15:27 编辑
xb370777978 发表于 2013-11-29 12:20
这个脚本用过- -
因为用了之后会导致怪物的行动一顿一顿的- -很不流畅,所以就放弃掉了。。。
这个难在于 ...


绝对不会造成任何卡顿,因为我用就没这个问题(肯定是其它脚本影响了)。
我尝试下其它可行的方法。

自动执行都不管用,不管怎样都要按下确定键(我觉得这样才能计算根据XY坐标的变量吧)。
如果把陷阱的事件复制到一个新事件里,当狗走到陷阱坐标时按下新复制的事件,陷阱才能够触发(按下的时机最好提前,在狗还未踏上陷阱的那一步)。
(另外,那个事件接触根本没用;如果开启了穿透,事件接触或者玩家接触都是能触发事件的。)

我发现了问题的所以,因为当前游戏只有一次触发有效。
在将陷阱事件复制到新事件中,
测试:一阵狂按该事件,发现当狗走到陷阱处并没有触发开关。
          但是,当狗走到陷阱处时,再按下新事件,开关顺利触发。
(或者说对地图XY坐标的ID只确定一次有效?)
这样自动执行和并行处理都不能起到作用了,而且事件触发也不能让事件与事件碰撞触发事件。

我有解决办法了,不过要建立第二页事件(虽然没办法,不过这样也更合理,当玩家走过陷阱开启第二页事件(也就是陷阱开启))。
看图最后狗顺利消失(把狗的穿透开启下,不然穿不过陷阱事件):


作者: xb370777978    时间: 2013-12-1 12:12
gaogs123456 发表于 2013-11-30 12:21
绝对不会造成任何卡顿,因为我用就没这个问题(肯定是其它脚本影响了)。
我尝试下其它可行的方法。

谢谢- -我完成了。。。。
我在一个空的点并行处理一个无线接收狗的XY坐标的事件,
然后再陷阱位置并行处理一个无线判定狗的XY坐标是否为陷阱的坐标位置的判定处理
如果XY坐标符合要求了就打开开关,使狗进入第二页事件页停住=。=
(其中陷阱XY的坐标使用定量,而非使用事件接收得到,当我使用事件接收陷阱XY坐标时狗就会穿越,
但当我使用定量的时候效果就完成了!!!)
谢谢您的帮助~~~





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