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

Project1

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

[已经解决] 用脚本让事件的移动的问题

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
255
在线时间
227 小时
注册时间
2009-7-26
帖子
216
跳转到指定楼层
1
发表于 2011-10-11 22:53:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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类里的方法

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

2
发表于 2011-10-12 08:55:19 | 只看该作者
本帖最后由 亿万星辰 于 2011-10-12 08:55 编辑

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

你看脚本里哪个方法里一下让事件移动3步的?

点评

怎么说呢,不管我怎么写,只要有横走和竖走两个方法连续呼叫,他们就会斜走⋯⋯  发表于 2011-10-12 21:47
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42409
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

3
发表于 2011-10-12 09:24:31 | 只看该作者
force是暴力的意思很容易理解就是强制移动路线,至于默认系统是按角色移动平率慢慢给角色push移动方向的。

评分

参与人数 1星屑 +14 收起 理由
darkscout3000 + 14 多谢帮助

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
255
在线时间
227 小时
注册时间
2009-7-26
帖子
216
4
 楼主| 发表于 2011-10-12 21:50:34 | 只看该作者
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步,而且是一步一脚印的斜着走过去的

点评

话说提醒功能咋不好使,版主和2l回帖都没提醒...  发表于 2011-10-12 21:52
不要吐槽我⋯⋯
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

5
发表于 2011-10-12 21:57:35 | 只看该作者
本帖最后由 亿万星辰 于 2011-10-12 21:59 编辑
darkscout3000 发表于 2011-10-12 21:50
那啥⋯⋯他们斜走不是瞬间到达,而是一步一步根据自己的频率走到目的地,我就是没办法把它弄的不斜着走⋯ ...


这个你应该直接在事件里指定而不是通过脚本里定义一个方法,在一个方法里连续执行若干个行动指令,归根到底其实仅仅是相当于给这个事件的坐标直接赋了目标地点的坐标,而并不是让这个事件根据你设置的行动序列一步步的走过去~充其量你能看到你给定的最后一个行动指令的朝向,然后事件走着滑步移动到目的地。
想设计一个路线让事件一步步的按照你的设定走过去,还是用事件里的移动指令来的比较快。
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
255
在线时间
227 小时
注册时间
2009-7-26
帖子
216
6
 楼主| 发表于 2011-10-12 22:18:08 | 只看该作者
亿万星辰 发表于 2011-10-12 08:57
这个你应该直接在事件里指定而不是通过脚本里定义一个方法,在一个方法里连续执行若干个行动指令,归根到 ...

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

嘛,总是谢谢你的回答了,实在不行我再另想办法便是

点评

话说我错了,这貌似是Game_Character类里头的方法,不是解译器处理的  发表于 2011-10-12 22:29
不要吐槽我⋯⋯
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

7
发表于 2011-10-12 22:38:18 | 只看该作者
本帖最后由 亿万星辰 于 2011-10-12 22:42 编辑
darkscout3000 发表于 2011-10-12 22:18
是,用事件确实比较快,但是我需要能够随时暂停它的移动然后随时继续,所以才需要这个东西⋯⋯
我看过事 ...


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

方法内部每次只移动一步,这一步是根据当前所处的坐标与目的地的坐标通过计算得到的,这样才能在每次执行这个方法时使得事件朝目的地移动一步,而不是一股脑的把预设好的路线一下子都传递给事件。

评分

参与人数 1星屑 +14 收起 理由
darkscout3000 + 14 多谢帮助

查看全部评分

我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
255
在线时间
227 小时
注册时间
2009-7-26
帖子
216
8
 楼主| 发表于 2011-10-12 23:12:50 | 只看该作者
亿万星辰 发表于 2011-10-12 09:38
如果说你是需要一个移动到指定目的地的方法,请参考move_toward_player方法~

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

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

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

不要吐槽我⋯⋯
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

9
发表于 2011-10-12 23:45:44 | 只看该作者
本帖最后由 后知后觉 于 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)
复制代码











你知道得太多了

回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
255
在线时间
227 小时
注册时间
2009-7-26
帖子
216
10
 楼主| 发表于 2011-10-12 23:51:17 | 只看该作者
后知后觉 发表于 2011-10-12 10:45
默认的设置移动路线.
在运行的时候是不会在 jumping? 和 moving? 的时候去调用 move_XXXX 类方法.
都是在到 ...

恍然大悟⋯⋯原来如此⋯⋯居然漏掉如此明显的判定⋯⋯多谢
不要吐槽我⋯⋯
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 13:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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