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

Project1

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

[已经过期] 如何改写“接近人物”的方式?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3574
在线时间
2338 小时
注册时间
2015-8-25
帖子
960

开拓者

跳转到指定楼层
1
发表于 2016-9-18 11:01:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 七重 于 2016-9-19 13:53 编辑

关于想要改写“移动路线”指令中的“接近人物”的方式。

  默认的接近玩家的方式是这样的:
  先正方向接近玩家,再斜方向接近玩家。
  

  我希望修改成这样:
  先斜方向接近玩家,之后再正方向接近玩家。
    并且斜方向接近的时候是用move_diagonal(x, y)来进行移动。(即斜方向移动命令)
  

==
自己看了一下接近人物的代码,不太明白move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0这句的涵义。
说起来假如把!@move_succeed注释掉的话接近方式会变成瞬移。。。
   def move_toward_character(character)
    sx = distance_x_from(character.x)
    sy = distance_y_from(character.y)
    if sx.abs > sy.abs
      move_straight(sx > 0 ? 4 : 6)
      move_straight(sy > 0 ? 8 : 2) if  sy != 0
    elsif sy != 0
      move_straight(sy > 0 ? 8 : 2)
      move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
    end
  end

==
追记:忽然又知道怎么写了。。窝先自己写一下。。
  黄图画多了之后感觉就有变笨了的感觉。。

==
这样就行了。

  def move_toward_character(character)
    sx = distance_x_from(character.x)
    sy = distance_y_from(character.y)
    if sx.abs == 0 && sy.abs != 0
      move_straight(sy > 0 ? 8 : 2)
    elsif sy.abs == 0 && sx.abs != 0
      move_straight(sx > 0 ? 4 : 6)
    elsif
      move_diagonal((sx > 0 ? 4 : 6), (sy > 0 ? 8 : 2))
    end
  end

--
不过我还是不知道为什么原来的脚本上要设定一个!@move_succeed。

  这个脚本的作用是配合arpg使用的,让敌人变得聪明一点,假如是近身攻击的怪物用原来的移动方式就好了。
  但是假如是远程的怪物可以换成这个。

  虽然实际感受是。。。并没有变聪明。。

==
完善,修改了转向,让敌人随时都能面对向着玩家
其实还可以在地图上并行一个控制开关的事件,实现随机选择一种行动模式。
比如是每3秒换一次行动模式,让敌人行动更加没有规律。
默认开关[1]控制。
RUBY 代码复制
  1. def move_toward_character(character)
  2.     sx = distance_x_from(character.x)
  3.     sy = distance_y_from(character.y)  
  4.     if sx < 0
  5.       if sy > 0
  6.         set_direction(sx.abs > sy.abs ? 6 : 2)
  7.       else
  8.         set_direction(sx.abs > sy.abs ? 6 : 8)
  9.       end
  10.     else
  11.       if sy < 0
  12.         set_direction(sx.abs > sy.abs ? 4 : 8)
  13.       else
  14.         set_direction(sx.abs > sy.abs ? 4 : 2)
  15.       end
  16.     end
  17.  
  18.   if $game_switches[1] != true
  19.  
  20.     if sx.abs == 0 && sy.abs != 0
  21.       move_straight(sy > 0 ? 8 : 2)
  22.     elsif sy.abs == 0 && sx.abs != 0
  23.       move_straight(sx > 0 ? 4 : 6)
  24.     elsif   
  25.       move_diagonal((sx > 0 ? 4 : 6), (sy > 0 ? 8 : 2))
  26.     end
  27.  
  28.   else
  29.  
  30.     if sx.abs > sy.abs
  31.       move_straight(sx > 0 ? 4 : 6)
  32.       move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0
  33.     elsif sy != 0
  34.       move_straight(sy > 0 ? 8 : 2)
  35.       move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
  36.     end
  37.    end
  38.  
  39.   end

点评

七重么么哒...好像看看你画的黄图..  发表于 2016-9-18 13:36
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-16 23:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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