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

Project1

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

[已经解决] 【奇发异想】关于主角靠近NPC自动接近

[复制链接]

Lv5.捕梦者

梦石
0
星屑
33228
在线时间
10499 小时
注册时间
2009-3-15
帖子
4757
1
发表于 2017-5-11 18:55:41 | 显示全部楼层
本帖最后由 soulsaga 于 2017-5-11 20:15 编辑

我不懂脚本..

点评

之前看错了  发表于 2017-5-11 20:04
原来你是要靠近NPC啊..之前  发表于 2017-5-11 20:03
感谢,你修改的是修正走路方向. 但是并没有预期的效果.  发表于 2017-5-11 19:54
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33228
在线时间
10499 小时
注册时间
2009-3-15
帖子
4757
2
发表于 2017-5-11 21:37:41 | 显示全部楼层
RUBY 代码复制
  1. def move_left(turn_enabled = true)
  2.     # 面向左
  3.     if turn_enabled
  4.       turn_left
  5.     end
  6.     # 可以通行的情況下
  7.     if passable?(@x, @y, 4)
  8.       # 面向左
  9.       turn_left
  10.       # 更新座標
  11.       @x -= 1
  12.       # 增加步數
  13.       increase_steps
  14.       move_toward_npc
  15.     # 不能通行的情況下
  16.     else
  17.       # 接觸事件的啟動判定
  18.       check_event_trigger_touch(@x-1, @y)
  19.     end
  20.   end

调用以下方法
其他方向移动也是照样样加个方法
RUBY 代码复制
  1. # ● 接近NPC
  2.   #--------------------------------------------------------------------------
  3.   def move_toward_npc
  4.     nsx = []
  5.     nsy = []
  6.     tsx = []
  7.     tsy = []
  8.     nxy = []
  9.     #p $game_map.events[1]
  10.     for i in 1..$game_map.events.id.size-1
  11.     nsx.push(@x.abs - $game_map.events[i].x.abs)
  12.     nsy.push(@y.abs - $game_map.events[i].y.abs)
  13.     tsx.push($game_map.events[i].x)
  14.     tsy.push($game_map.events[i].y)
  15.   end
  16.     for i in 0..nsx.size-1
  17.     nxy.push(nsx[i]+nsy[i])
  18.   end
  19.     for i in 0..nxy.size-1
  20.     if nxy[i] == nxy.min
  21.     #npcxy = i
  22.     tnpcx = tsx[i]
  23.     tnpcy = tsy[i]
  24.     break
  25.     end
  26.     end
  27.     # 求得与npc的坐标差
  28.     sx = @x - tnpcx
  29.     sy = @y - tnpcy
  30.     #p tnpcy
  31.     # 坐标相等情况下
  32.     if sx == 0 and sy == 0
  33.       return
  34.     end
  35.     # 求得差的绝对值
  36.     abs_sx = sx.abs
  37.     abs_sy = sy.abs
  38.     # 横距离与纵距离相等的情况下
  39.     if abs_sx == abs_sy
  40.       # 随机将边数增加 1
  41.       rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
  42.     end
  43.     # 横侧距离长的情况下
  44.     if abs_sx <= 2
  45.       # 左右方向优先。向NPC移动
  46.       sx > 0 ? move_left : move_right
  47.       if not moving? and sy != 0
  48.         sy > 0 ? move_up : move_down
  49.       end
  50.     # 竖侧距离长的情况下
  51.     elsif abs_sy <= 2
  52.       # 上下方向优先。向NPC移动
  53.       sy > 0 ? move_up : move_down
  54.       if not moving? and sx != 0
  55.         sx > 0 ? move_left : move_right
  56.       end
  57.     end
  58.   end

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-5 18:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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