Project1

标题: 用脚本让事件的移动的问题 [打印本页]

作者: darkscout3000    时间: 2011-10-11 22:53
标题: 用脚本让事件的移动的问题
本帖最后由 darkscout3000 于 2011-10-12 09:28 编辑

我尝试用脚本让某个事件沿着一定的路线行走
我找到事件 Game_Event 的父类 Game_Character 里头的 move_up, move_left, move_down, move_right

但是我人工写个方法比如
  1. def move_event
  2.   3.times do
  3.     move_up
  4.     move_right
  5.   end
  6. end
复制代码
结果是人物不是先向上再向右,而是斜着走⋯⋯
这让我非常纠结

RM自带的事件编辑器不是可以设定行走路线么?
我不理解的是为什么解译器设定那个路线就可以上下左右的走,而我写的方法人物就会斜走?
虽然解译器版本的里头貌似有个什么@force_move_event还是什么的定义,我自己设成True貌似也没有用⋯⋯

编辑:话说我错了,事件自己走路貌似不是解译器而是Game_Character类里的方法dsu_plus_rewardpost_czw
作者: 亿万星辰    时间: 2011-10-12 08:55
本帖最后由 亿万星辰 于 2011-10-12 08:55 编辑

简单的说运行的太快了……

你看脚本里哪个方法里一下让事件移动3步的?
作者: fux2    时间: 2011-10-12 09:24
force是暴力的意思很容易理解就是强制移动路线,至于默认系统是按角色移动平率慢慢给角色push移动方向的。
作者: darkscout3000    时间: 2011-10-12 21:50
fux2 发表于 2011-10-11 20:24
force是暴力的意思很容易理解就是强制移动路线,至于默认系统是按角色移动平率慢慢给角色push移动方向的。 ...

那啥⋯⋯他们斜走不是瞬间到达,而是一步一步根据自己的频率走到目的地,我就是没办法把它弄的不斜着走⋯⋯就算我写成
  1. move_right
  2. move_right
  3. move_right
  4. move_up
  5. move_up
  6. move_up
复制代码
它还是斜着朝右上方走3步,而且是一步一脚印的斜着走过去的
作者: 亿万星辰    时间: 2011-10-12 21:57
本帖最后由 亿万星辰 于 2011-10-12 21:59 编辑
darkscout3000 发表于 2011-10-12 21:50
那啥⋯⋯他们斜走不是瞬间到达,而是一步一步根据自己的频率走到目的地,我就是没办法把它弄的不斜着走⋯ ...


这个你应该直接在事件里指定而不是通过脚本里定义一个方法,在一个方法里连续执行若干个行动指令,归根到底其实仅仅是相当于给这个事件的坐标直接赋了目标地点的坐标,而并不是让这个事件根据你设置的行动序列一步步的走过去~充其量你能看到你给定的最后一个行动指令的朝向,然后事件走着滑步移动到目的地。
想设计一个路线让事件一步步的按照你的设定走过去,还是用事件里的移动指令来的比较快。
作者: darkscout3000    时间: 2011-10-12 22:18
亿万星辰 发表于 2011-10-12 08:57
这个你应该直接在事件里指定而不是通过脚本里定义一个方法,在一个方法里连续执行若干个行动指令,归根到 ...

是,用事件确实比较快,但是我需要能够随时暂停它的移动然后随时继续,所以才需要这个东西⋯⋯
我看过事件类的定义,里面其实有一个RPG::MoveRoute和RPG::MoveCommand这两个类定义了行走路线,然后解译器会根据定义来移动事件。
但是解译器本身也就是根据MoveCommand类给的ID来呼叫move_up, move_down, move_left, move_right 方法。
所以我觉得自己作修改是完全可能的,只是解译器有什么地方我没看懂,所以才出现了这种情况。

嘛,总是谢谢你的回答了,实在不行我再另想办法便是
作者: 亿万星辰    时间: 2011-10-12 22:38
本帖最后由 亿万星辰 于 2011-10-12 22:42 编辑
darkscout3000 发表于 2011-10-12 22:18
是,用事件确实比较快,但是我需要能够随时暂停它的移动然后随时继续,所以才需要这个东西⋯⋯
我看过事 ...


如果说你是需要一个移动到指定目的地的方法,请参考move_toward_player方法~

方法内部每次只移动一步,这一步是根据当前所处的坐标与目的地的坐标通过计算得到的,这样才能在每次执行这个方法时使得事件朝目的地移动一步,而不是一股脑的把预设好的路线一下子都传递给事件。
作者: darkscout3000    时间: 2011-10-12 23:12
亿万星辰 发表于 2011-10-12 09:38
如果说你是需要一个移动到指定目的地的方法,请参考move_toward_player方法~

方法内部每次只移动一步, ...

谢谢版主热心回复,这也是个好办法,不过我还是需要手动指定路线

具体来说就是我现在做的游戏有马路,然后我需要事件沿着马路走,我可以用地图标记神马的判断马路在哪儿,就是走路的时候出了点这个小麻烦,呵呵


作者: 后知后觉    时间: 2011-10-12 23:45
本帖最后由 后知后觉 于 2011-10-12 23:51 编辑

默认的设置移动路线.
在运行的时候是不会在 jumping? 和 moving? 的时候去调用 move_XXXX 类方法.
都是在到达目的地后才调用的.有一个变量叫 @move_route_index
就是记录移动列表 @move_route.list 里的位置的.
简单写一个.大概就是这样
  1. #==============================================================================
  2. # ■ Game_Event
  3. #==============================================================================

  4. class Game_Event < Game_Character
  5.   #--------------------------------------------------------------------------
  6.   # ● 初始化对像
  7.   #--------------------------------------------------------------------------
  8.   alias set_route_old_initialize initialize
  9.   def initialize(map_id, event)
  10.     @route_list = []
  11.     @route_index = 0
  12.     set_route_old_initialize(map_id, event)
  13.   end
  14.   def set_route_list(ary = [])
  15.     @route_list = ary
  16.     @route_index = 0
  17.   end
  18.   alias set_route_old_update update
  19.   def update
  20.     set_route_old_update
  21.     if not moving? and not jumping?
  22.       if @route_index < @route_list.size
  23.         case @route_list[@route_index]
  24.         when 2
  25.           move_down
  26.         when 4
  27.           move_left
  28.         when 6
  29.           move_right
  30.         when 8
  31.           move_up
  32.         end
  33.         @route_index += 1
  34.         if @route_index == @route_list.size
  35.           @route_index = 0
  36.           @route_list.clear
  37.         end
  38.       end
  39.     end
  40.   end
  41. end
复制代码
调用的话.类似于这样
  1. ary = [2,6,2,6,2,6,2,6]
  2. event = $game_map.events[1]
  3. event.set_route_list(ary)
复制代码

作者: darkscout3000    时间: 2011-10-12 23:51
后知后觉 发表于 2011-10-12 10:45
默认的设置移动路线.
在运行的时候是不会在 jumping? 和 moving? 的时候去调用 move_XXXX 类方法.
都是在到 ...

恍然大悟⋯⋯原来如此⋯⋯居然漏掉如此明显的判定⋯⋯多谢




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