Project1

标题: 如何在大地图上让一个怪追着另一个怪打 [打印本页]

作者: chinalfm    时间: 2011-4-6 08:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: 风缘    时间: 2011-4-6 08:59
如果你想用事件,我帮不上忙。。。脚本流的飘过。。。

如果脚本,只要在实时更新下怪的屏幕坐标和朝向,不段向另一个怪靠拢就可以了。然后用事件触发这个脚本。
作者: chinalfm    时间: 2011-4-6 09:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: 风缘    时间: 2011-4-6 09:06
现在上班。。不方便帮你写。。。今晚吧,如果还没人帮你的话。
作者: 3202972    时间: 2011-4-6 10:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: chinalfm    时间: 2011-4-6 11:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 3202972    时间: 2011-4-6 11:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: best_student    时间: 2011-4-6 17:21
回复 风缘 的帖子

我也想听
作者: 风缘    时间: 2011-4-6 19:28
有人解决了,我也懒得写了。
我也顺便学习下怎么用事件。。。


作者: 强弩之末    时间: 2011-4-6 22:28
  呃……怪追着怪……事件很好弄的嘛。
作者: chinalfm    时间: 2011-4-7 00:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: 3202972    时间: 2011-4-7 12:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: chinalfm    时间: 2011-4-7 17:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 3202972    时间: 2011-4-7 19:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: chinalfm    时间: 2011-4-8 11:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 3202972    时间: 2011-4-8 16:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: 风缘    时间: 2011-4-9 16:07
我发个脚本版的吧。

在 Main 之前建立脚本页,挺入以下:
  1. class Game_Character

  2.   attr_accessor :move_target        # 移动的目标事件

  3.   # 启动移动到目标
  4.   def startMoveTo(event)
  5.     @move_target = event
  6.     @move_type = 4
  7.   end

  8.   #--------------------------------------------------------------------------
  9.   # ● 计算距离事件的横向距离
  10.   #--------------------------------------------------------------------------
  11.   def distance_x_from_event(event)
  12.     sx = @x - event.x
  13.     if $game_map.loop_horizontal?         # 横向循环的场合
  14.       if sx == 1 - $game_map.width
  15.         sx += $game_map.width
  16.       elsif sx.abs > $game_map.width / 2  # 是否大于地图宽度
  17.         sx -= $game_map.width             # 减除地图宽度
  18.       end
  19.     end
  20.     return sx
  21.   end

  22.   #--------------------------------------------------------------------------
  23.   # ● 计算距离事件的纵向距离
  24.   #--------------------------------------------------------------------------
  25.   def distance_y_from_event(event)
  26.     sy = @y - event.y
  27.     if $game_map.loop_vertical?           # 纵像循环的场合
  28.       if sy == 1 - $game_map.height
  29.         sy += $game_map.height
  30.       elsif sy.abs > $game_map.height / 2 # 是否大于地图高度
  31.         sy -= $game_map.height            # 减除地图高度
  32.       end
  33.     end
  34.     return sy
  35.   end

  36.   #--------------------------------------------------------------------------
  37.   # ● 接近事件
  38.   #--------------------------------------------------------------------------
  39.   def move_toward_event(event)
  40.     sx = distance_x_from_event(event)
  41.     sy = distance_y_from_event(event)
  42.     sx += $game_map.width * 2 if $game_map.loop_horizontal? and sx < - $game_map.width  and sx > - $game_map.width * 2
  43.     sy += $game_map.height * 2 if $game_map.loop_vertical? and sy < - $game_map.height  and sy > - $game_map.height * 2
  44.     if sx != 0 or sy != 0
  45.       if sx.abs > sy.abs                  # 横向距离较大
  46.         sx > 0 ? move_left : move_right   # 优先往左右走
  47.         if @move_failed and sy != 0
  48.           sy > 0 ? move_up : move_down
  49.         end
  50.       else                                # 纵向距离较大
  51.         sy > 0 ? move_up : move_down      # 优先往上下走
  52.         if @move_failed and sx != 0
  53.           sx > 0 ? move_left : move_right
  54.         end
  55.       end
  56.     end
  57.   end

  58.   #--------------------------------------------------------------------------
  59.   # ● 更新画面 (本身行动)
  60.   #--------------------------------------------------------------------------
  61.   def update_self_movement
  62.     if @stop_count > 30 * (5 - @move_frequency)
  63.       case @move_type
  64.       when 1;  move_type_random
  65.       when 2;  move_type_toward_player
  66.       when 3;  move_type_custom
  67.       when 4:  move_toward_event(@move_target)
  68.       end
  69.     end
  70.   end

  71. end
复制代码
然后,打开工程,建立事件 001 和 002 设置如图所示

事件 001:追其他事件的事件


其中的脚本为:
  1. me = get_character(0)                # 获取当前事件
  2. target = $game_variables[1]          # 获取目标(在1号变量中)
  3. me.startMoveTo(target) if target != nil and target.is_a?(Game_Character)
复制代码
再建立事件 002 : 被追的事件


开始后,与事件 002 对话就是了。这里用到 1号变量1号开关  ,你可以自己改


PS: 我要好人卡






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