Project1

标题: 要怎么样实现追赶效果呢? [打印本页]

作者: 飞火流萤    时间: 2014-11-17 22:36
标题: 要怎么样实现追赶效果呢?
比如在事件移动里面,有接近和随机移动还有自定义移动,但是我希望实现的是比如角色追某个事件,角色是由玩家自己控制的,但是被追的那个事件也会相应的智能移动,比如靠近事件某个范围以内的时候,事件就开始移动,是不是只有靠脚本用坐标锁定来实现?
作者: 梦·林夕    时间: 2014-11-17 23:36
事件如果一开始是固定或在一个固定的范围内的话,在它周围弄几个事件,与主角接触时开启开关1号(这个至于是几号你自己决定也行),敌人的第二个事件页开启条件就是1号开关,这一页的设置就是靠近主角、、、频率和速度就自己设置了。
如果是随机移动的……就不用看了。。。。
作者: yang1zhi    时间: 2014-11-18 11:50
move_toward_player是接近角色的意思
move_random是随机移动的意思
远离角色是move_away_from_player,在Game_Character 3可以知道
  1. #==============================================================================
  2. # ■ Game_Character (接近专定义)
  3. #------------------------------------------------------------------------------
  4. #  处理角色的类。本类作为 Game_Player 类与 Game_Event
  5. # 类的超级类使用。
  6. #==============================================================================
  7. # 使用方法:
  8. # 在设置事件移动那里改为自定义,路线为:toward_player_add(x范围,y范围)
  9. #==============================================================================
  10. class Game_Character
  11. def toward_player_add(x = 1,y = 1)
  12. # 求得与主角坐标的差
  13. sx = (@x - $game_player.x).abs
  14. sy = (@y - $game_player.y).abs
  15. if sx <= x and sy <= y
  16. move_toward_player
  17. @move_speed = @last_speed  + 2

  18. else
  19. move_random
  20. end
  21. end
  22. end
复制代码

作者: yang1zhi    时间: 2014-11-20 12:02
比如说在if sx <= x and sy <= y下面插入这句话。那么意思就是当两人的距离在视角范围内,怪物远离角色,而且距离是2的时候,怪物从右向左旋转 90 度

turn_random随机变换方向
turn_180旋转 180 度
jump(x_plus, y_plus)跳跃
move_down向下移动
这些在默认的脚本中都可以看到,比如Game_Character 3
  1. sx = (@x - $game_player.x).abs
  2. sy = (@y - $game_player.y).abs
  3. if sx <= x and sy <= y
  4. if sx = 2 and sy = 2
  5. turn_right_or_left_90
  6. end
  7. move_away_from_player
  8. @move_speed = @last_speed  + 2
复制代码

作者: z2214557w    时间: 2014-11-20 12:34
今天刚刚需要做到这个效果,
遇到个问题是:单纯设置事件远离角色的话,它跑到墙角就不会拐头也不会动了。这个不知道怎么解决
作者: taroxd    时间: 2014-11-20 12:40
z2214557w 发表于 2014-11-20 12:34
今天刚刚需要做到这个效果,
遇到个问题是:单纯设置事件远离角色的话,它跑到墙角就不会拐头也不会动了。 ...

一定几率随机移动,一定几率远离角色
作者: z2214557w    时间: 2014-11-20 12:44
taroxd 发表于 2014-11-20 12:40
一定几率随机移动,一定几率远离角色


能不能具体一点?
前面看了些用坐标判定的办法,就是角色进入一定范围就远离,不在范围就随机,
但是你一直追它,保持在范围之内的话,仍然避免不了逼到墙角就不动的现象。
作者: taroxd    时间: 2014-11-20 12:48
z2214557w 发表于 2014-11-20 12:44
能不能具体一点?
前面看了些用坐标判定的办法,就是角色进入一定范围就远离,不在范围就随机,
但是你一 ...

角色进入一定范围之后,随机选择“远离”或“随机”。当然选择两者的概率不用相等。
作者: z2214557w    时间: 2014-11-20 16:30
yang1zhi 发表于 2014-11-20 12:02
比如说在if sx

唉,最重要的一点没法解决啊,逼到墙角仍然就发呆了{:2_264:}
作者: 飞火流萤    时间: 2014-11-20 18:48
yang1zhi 发表于 2014-11-18 11:50
move_toward_player是接近角色的意思
move_random是随机移动的意思
远离角色是move_away_from_player,在Ga ...

我感觉不管怎么弄,事件总还是会卡主,你们做的是不是也会这样?我感觉无解了
作者: yang1zhi    时间: 2014-11-20 22:07
本帖最后由 yang1zhi 于 2014-11-20 23:37 编辑

@z2214557w
我只能改成这样了。行的话就拿去吧
我知道你已经解决了。我来加强自己刚刚写的脚本
  1. #==============================================================================
  2. # ■ Game_Character (接近专定义)
  3. #------------------------------------------------------------------------------
  4. #  处理角色的类。本类作为 Game_Player 类与 Game_Event
  5. # 类的超级类使用。
  6. #==============================================================================
  7. # 使用方法:
  8. # 在设置事件移动那里改为自定义,路线为:toward_player_add(x范围,y范围)
  9. #==============================================================================
  10. class Game_Character
  11. def toward_player_add(x = 1,y = 1)
  12.     new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  13.     new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)

  14. # 求得与主角坐标的差
  15. sx = (@x - $game_player.x).abs
  16. sy = (@y - $game_player.y).abs
  17. if sx <= x and sy <= y
  18. turn_away_from_player
  19. if $game_map.passable?(new_x, new_y,0)
  20.   move_away_from_player
  21.   else
  22.   turn_left_90
  23.     new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  24.     new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)

  25.   if $game_map.passable?(new_x, new_y,0)
  26.   move_forward
  27. else

  28.   turn_180
  29.       new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  30.     new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)

  31.   if $game_map.passable?(new_x, new_y,0)
  32.   move_forward
  33. else
  34.   turn_left_90
  35. move_backward
  36.   turn_left_90
  37.       new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  38.     new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)

  39.   if $game_map.passable?(new_x, new_y,0)
  40.   move_forward
  41. else
  42.   turn_180
  43.       new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  44.     new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)

  45.   if $game_map.passable?(new_x, new_y,0)
  46.   move_forward
  47. end
  48. end
  49. end
  50. end
  51. end
  52. else
  53. move_random
  54. end
  55. end
  56. end
复制代码





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