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

Project1

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

[已经过期] A事件追逐B事件的做法該如何作出來?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
跳转到指定楼层
1
发表于 2016-2-16 03:16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
主角現在是旁觀者,並非是主角被(怪物)事件追逐
我想讓主角先旁觀村民被怪物追著跑,如果能辦到設定上會拆成兩部分:
第一部分先是一進一退的這種設定好的路線(自動執行完開啟開關執行第二部分),
第二部分採用並行處理,這時村民和怪物自己在地圖上亂跑,但怪物一定要是追著村民直到受主角攻擊仇恨轉移(偵測到主角改往主角靠近)
如果上面可以實現的話我還想讓地圖上同時有很多組這樣村民與npc以第二部分的方式存在

總結起來就是事件追逐事件了,利用上方的站內蒐尋也沒有找到(1筆沒下文另1筆也沒有解決
不知道這樣的東西是否可以實現?可以實現的話具體實施方法是什麼?

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

2
发表于 2016-2-16 14:49:43 | 只看该作者
出自哪我不知道
这是从群战7.0脚本里复制出来的
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. #==============================================================================
  5. # 事件向移动 by SailCat
  6. #------------------------------------------------------------------------------
  7. # 说明:这个脚本实际是利用系统的“接近主角”“远离主角”的功能修改的,可以用作
  8. #       事件向的移动功能,可以用来做追杀NPC的敌人、跟着大人的小孩,或者在自动
  9. #       执行的剧情事件中令主角移向某NPC。
  10. # 使用方法:在移动路线里设置脚本
  11. #   脚本:move_type_toward_event(事件编号,[视野],[机敏度]),设定事件移动类型为
  12. #         “接近事件”,后两个是隐含参数
  13. #   脚本:move_toward_event(事件编号),令事件朝指定事件方向移动一步
  14. #   脚本:move_away_from_event(事件编号),令事件朝指定事件相反方向移动一步
  15. # 注意:事件编号是个必须参数,不能省略,另外注意一下参数编号不能是事件自身编号
  16. #==============================================================================
  17. class Game_Character
  18. #--------------------------------------------------------------------------
  19. # ● 移动类型 : 接近事件
  20. #--------------------------------------------------------------------------
  21. def move_type_toward_event(event, sight = 20, ai = 6)
  22.    # 指定自身的情况下不执行动作
  23.    if event == self
  24.      return
  25.    end
  26.    # 求得与主角坐标的差
  27.    sx = @x - event.x
  28.    sy = @y - event.y
  29.    # 求得差的绝对值
  30.    abs_sx = sx > 0 ? sx : -sx
  31.    abs_sy = sy > 0 ? sy : -sy
  32.    # 如果方圆超过了视野
  33.    if abs_sx ** 2 + abs_sy ** 2 >= sight ** 2
  34.      # 随机
  35.      move_random
  36.      return
  37.    end
  38.    # 随机 0~5 的分支
  39.    case rand(ai)
  40.    when 0..3  # 接近主角
  41.      move_toward_event(event)
  42.    when 4  # 随机
  43.      move_random
  44.    when 5  # 前进一步
  45.      move_forward
  46.    end
  47. end
  48. #--------------------------------------------------------------------------
  49. # ● 接近事件
  50. #    event_id : 事件编号
  51. #--------------------------------------------------------------------------
  52. def move_toward_event(event)
  53.    # 指定自身的情况下不执行动作
  54.    if event == self
  55.      return
  56.    end
  57.    # 求得与事件的坐标差
  58.    sx = @x - event.x
  59.    sy = @y - event.y
  60.    # 坐标相等情况下
  61.    if sx == 0 and sy == 0
  62.      return
  63.    end
  64.    # 求得差的绝对值
  65.    abs_sx = sx.abs
  66.    abs_sy = sy.abs
  67.    # 横距离与纵距离相等的情况下
  68.    if abs_sx == abs_sy
  69.      # 随机将边数增加 1
  70.      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
  71.    end
  72.    # 横侧距离长的情况下
  73.    if abs_sx > abs_sy
  74.      # 左右方向优先。向事件移动
  75.      sx > 0 ? move_left : move_right
  76.      if not moving? and sy != 0
  77.        sy > 0 ? move_up : move_down
  78.      end
  79.    # 竖侧距离长的情况下
  80.    else
  81.      # 上下方向优先。向事件移动
  82.      sy > 0 ? move_up : move_down
  83.      if not moving? and sx != 0
  84.        sx > 0 ? move_left : move_right
  85.      end
  86.    end
  87. end
  88. #--------------------------------------------------------------------------
  89. # ● 远离事件
  90. #    event_id : 事件编号
  91. #--------------------------------------------------------------------------
  92. def move_away_from_event(event)
  93.    # 指定自身的情况下不执行动作
  94.    if event == self
  95.      return
  96.    end
  97.    # 求得与事件的坐标差
  98.    sx = @x - event.x
  99.    sy = @y - event.y
  100.    # 坐标相等情况下
  101.    if sx == 0 and sy == 0
  102.      return
  103.    end
  104.    # 求得差的绝对值
  105.    abs_sx = sx.abs
  106.    abs_sy = sy.abs
  107.    # 横距离与纵距离相等的情况下
  108.    if abs_sx == abs_sy
  109.      # 随机将边数增加 1
  110.      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
  111.    end
  112.    # 横侧距离长的情况下
  113.    if abs_sx > abs_sy
  114.      # 左右方向优先。远离事件移动
  115.      sx > 0 ? move_right : move_left
  116.      if not moving? and sy != 0
  117.        sy > 0 ? move_down : move_up
  118.      end
  119.    # 竖侧距离长的情况下
  120.    else
  121.      # 上下方向优先。远离事件移动
  122.      sy > 0 ? move_down : move_up
  123.      if not moving? and sx != 0
  124.        sx > 0 ? move_right : move_left
  125.      end
  126.    end
  127. end








  128.   #--------------------------------------------------------------------------
  129.   # ● 死亡处理
  130.   #--------------------------------------------------------------------------
  131.   def dead_for_slg
  132.       
  133.       @deadbody = true
  134.       @through = true
  135.       @opacity = 185
  136.       Audio.se_play("Audio/SE/bodyfall_0"+ (rand(1)+1).to_s,se_v, 100)

  137.   end  


  138.   
  139.   
  140.   #-----------------------------------------------------------------------------
  141.   # returns if the event is inside the circle
  142.   #-----------------------------------------------------------------------------
  143.   def in_circle?(cx, cy, radius, sx = @x, sy = @y)
  144.     return Math.sqrt((cx - sx) ** 2 + (cy - sy) ** 2) <= radius
  145.   end
  146.   
  147.   #-----------------------------------------------------------------------------
  148.   # returns of the event is inside the square
  149.   #-----------------------------------------------------------------------------
  150.   def in_square?(mx, my, r, sx = @x, sy = @y)
  151.     x_s = mx - r
  152.     x_e = mx + r
  153.     y_s = my - r
  154.     y_e = my + r
  155.     return (sx >= x_s and sx <= x_e and sy >= y_s and sy <= y_e)      
  156.   end
  157.    
  158.   #-----------------------------------------------------------------------------
  159.   # returns of the event is inside the rectangle
  160.   #-----------------------------------------------------------------------------
  161.   def in_rect?(mx, my, width, height, sx = @x, sy = @y)
  162.     x_s = mx - width / 2
  163.     x_e = mx + width / 2
  164.     y_s = my - height / 2
  165.     y_e = my + height / 2
  166.     return (sx >= x_s and sx <= x_e and sy >= y_s and sy <= y_e)
  167.   end
  168.   
  169.   
  170.   
  171. #--------------------------------------------------------------------------
  172. # Blow
  173. #--------------------------------------------------------------------------
  174. def blow(d, power = 1)
  175.     @knock_back_prespeed = @move_speed if @knock_back_prespeed == nil      
  176.     if self.knock_back_disable
  177.        @move_speed = XAS_BA::KNOCK_BACK_SPEED
  178.     end   
  179.     return if self.knock_back_disable
  180.     power.times do
  181.       if passable?(self.x, self.y, d)
  182.         @x += ([3,6,9].include?(d) ? 1 : [1,4,7].include?(d) ? -1 : 0)
  183.         @y += ([1,2,3].include?(d) ? 1 : [7,8,9].include?(d) ? -1 : 0)
  184.       end
  185.     end
  186.     @knock_back_duration = XAS_BA::KNOCK_BACK_DURATION_HERO  
  187.     @move_speed = XAS_BA::KNOCK_BACK_SPEED
  188.   end  
  189.   
  190.   
  191. #--------------------------------------------------------------------------
  192. # life_perpose
  193. #--------------------------------------------------------------------------
  194.   def save_position
  195.     @sence_used_x = @x
  196.     @sence_used_y = @y
  197.   end
  198.   def replace_position_for_scene
  199.     return if @sence_used_x == nil
  200.     self.moveto(@sence_used_x,@sence_used_y)
  201.   end
  202.   
  203.   
  204.   
  205.   
  206.     #--------------------------------------------------------------------------
  207.   # ● SE音量
  208.   #--------------------------------------------------------------------------
  209.   def play_sound(se_name,num = nil)
  210.     #p @real_x,@real_y
  211.     d = (@x - $game_player.x).abs + (@y - $game_player.y).abs
  212.     v = 100 - d*4
  213.     if num == nil
  214.     Audio.se_play("Audio/SE/" + se_name, v, 100)
  215.     else
  216.     Audio.se_play("Audio/SE/"+se_name + (rand(num)+1).to_s,v, 100)
  217.     end
  218.    
  219.   end   














  220. end


  221.   
  222.   
  223.   
  224.   
  225.   
  226.   
  227.   
  228.   
  229. #==============================================================================
  230. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  231. #==============================================================================
复制代码

点评

@SailCat前輩我翻了下你發過的主題,沒找到耶(想去看看有沒有範例工程,然後看見了很多很神奇很厲害的主題),能有連結嗎?  发表于 2016-2-18 03:05
是用词不当。作者里面有写了自然是知道。脚本发在哪里不知道。  发表于 2016-2-18 01:19
这是我的脚本……居然说不知道出自哪  发表于 2016-2-18 00:33
好的,我先留言表示我看到了,我明天晚上下班會趕快常是在做發問或標記解決問題。謝謝前輩了  发表于 2016-2-17 01:49
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
3
 楼主| 发表于 2016-2-18 03:01:49 | 只看该作者
使用方法:在移动路线里设置脚本
這意思是指我要把要使用到的對應method貼到 事件指令>>移動路線>>腳本 的意思?
比方說我現在要讓A怪追B,我應該要在A怪的事件指令>>移動路線>>腳本 貼上 move_toward_event(B事件的id) 這樣嗎?

第50行註解寫的event_id有用到嗎??還是其實他就是52行的參數event?

然後我看見了裡面有abs_sx 這樣的變數名稱,熊熊有一種危機感...這該不會是必須使用ABS才能用的腳本?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 09:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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