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

Project1

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

[已经解决] 怎么让一个事件平滑地跟随另一事件移动

[复制链接]

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
跳转到指定楼层
1
发表于 2015-1-15 16:54:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
希望让2号事件平滑地跟随1号事件平移,类似于父物体带动子物体的效果。在一个并行事件里用以下的两种脚本尝试,跟随的事件总是一卡一卡的,有延迟,即使把跟随事件的速度调到最高也没有用,怎么办??

$game_map.events[2].moveto($game_map.events[1].x, 11)



$game_map.events[2].x = $game_map.events[1].x

评分

参与人数 1星屑 +35 收起 理由
︶ㄣ牛排ぶ + 35 手动认可奖励

查看全部评分

囡囚囨囚囨図囨囧

Lv5.捕梦者

梦石
0
星屑
33432
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2015-1-16 16:36:25 | 只看该作者
move_to 是直接“闪”到目的地,AAA.x = ? 也是一样的效果。
要慢慢走到目的地,需要随时在跟随人物里面刷新,判断被跟随人物的坐标。
根据坐标差来决定跟随人物往哪个方向移动。
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33432
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

3
发表于 2015-1-16 16:57:35 | 只看该作者
  1. #==============================================================================
  2. # 事件-->脚本 里写:$game_map.events[1].follow($game_map.events[2])  ,就是 1
  3. #号事件跟随 2 号事件,要跟随玩家,把括号里面的 $game_map.events[2] 改成 $game_player 。
  4. # 跟随者.follow(被跟随者)  。跟随事件里写 脚本 ,并且设置为 并行处理 。
  5. #==============================================================================
  6. class Game_Character
  7.   #-----------------------------------------------------------------------
  8.   def follow(target)
  9.     sx = @x - target.x
  10.     sy = @y - target.y
  11.     abs_sx = sx.abs; abs_sy = sy.abs
  12.     return if abs_sx + abs_sy < 2     #<= 坐标差小于多少就不跟随。
  13.     # 求得差的绝对值
  14.     abs_sx = sx.abs
  15.     abs_sy = sy.abs
  16.     # 横距离与纵距离相等的情况下
  17.     if abs_sx == abs_sy
  18.       # 随机将边数增加 1
  19.       rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
  20.     end
  21.     # 横侧距离长的情况下
  22.     if abs_sx > abs_sy
  23.       # 左右方向优先。
  24.       sx > 0 ? move_left : move_right
  25.       if not moving? and sy != 0
  26.         sy > 0 ? move_up : move_down
  27.       end
  28.     # 竖侧距离长的情况下
  29.     else
  30.       # 上下方向优先。向主角移动
  31.       sy > 0 ? move_up : move_down
  32.       if not moving? and sx != 0
  33.         sx > 0 ? move_left : move_right
  34.       end
  35.     end
  36.   end
  37. end
  38. #==============================================================================
复制代码
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2015-1-16 17:57:06 | 只看该作者
芯☆淡茹水 发表于 2015-1-16 16:57


并行事件什么的最讨厌了

RUBY 代码复制
  1. class Game_Character
  2.  
  3.   # $game_map.events[1].follow = $game_map.events[2]
  4.   # $game_map.events[1].follow = nil
  5.   attr_accessor :follow
  6.  
  7.   alias_method :update_without_follow, :update
  8.  
  9.   def update
  10.     update_without_follow
  11.     return unless @follow
  12.     # 把你的代码中 target 设为 @follow
  13.   end
  14.  
  15. end
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
5
 楼主| 发表于 2015-1-17 11:08:23 | 只看该作者
芯☆淡茹水 发表于 2015-1-16 16:57

好像效果有点区别,我希望当1号事件移动时(其实只有从左往右或从右往左平移),2号事件在其正下方一定距离,保持纵坐标的距离不变,也同1号事件一起平移

点评

相对位移?  发表于 2015-1-17 15:14
囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
6
发表于 2015-1-18 18:04:13 | 只看该作者
本帖最后由 恐惧剑刃 于 2015-1-18 18:40 编辑

够不够平滑???哈哈哈哈哈
比角色跟随平滑NNN倍

小火车.zip

202.7 KB, 下载次数: 74

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
7
 楼主| 发表于 2015-1-18 18:35:57 | 只看该作者
恐惧剑刃 发表于 2015-1-18 18:04
够不够平滑???哈哈哈哈哈
比角色跟随平滑NNN倍

为什么总是报有毒?

点评

已经修改直接上工程文件夹。。。  发表于 2015-1-18 18:41
使用了默认的压缩工程。。  发表于 2015-1-18 18:39
囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
8
 楼主| 发表于 2015-1-18 20:38:14 | 只看该作者
本帖最后由 幻耶 于 2015-1-18 20:39 编辑
恐惧剑刃 发表于 2015-1-18 18:04
够不够平滑???哈哈哈哈哈
比角色跟随平滑NNN倍


我的意思是:假设事件1是一个喷火怪物,事件2是用来显示喷火动画的,事件1会在地图上一边喷火一边左右平移,事件2始终与之保持一定纵向距离平滑跟随。

因为事件1的行走图太大而火焰动画太长导致直接用事件1显示喷火动画会错位,所以想两个事件拼接起来
囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
9
发表于 2015-1-18 20:57:31 | 只看该作者
幻耶 发表于 2015-1-18 20:38
我的意思是:假设事件1是一个喷火怪物,事件2是用来显示喷火动画的,事件1会在地图上一边喷火一边左右平 ...

以前写的
  1. #==============================================================================
  2. # ■ Game_Character (分割定义 4)
  3. #------------------------------------------------------------------------------
  4. #  处理角色的类。本类作为 Game_Player 类与 Game_Event
  5. # 类的超级类使用。
  6. #==============================================================================

  7. class Game_Character
  8.   #--------------------------------------------------------------------------
  9.   # ● 接近
  10.   #--------------------------------------------------------------------------
  11.   # 使用方法 :
  12.   # 事件=>设置移动路线=>脚本=>输入=>toward(目标的X坐标, 目标的Y坐标)
  13.   # 可以单方向接近,只需把“目标的X坐标”或者“目标的Y坐标”传nil就可以
  14.   #--------------------------------------------------------------------------
  15.   # 目标的X既可以是主角也可以是事件甚至可以是纯坐标
  16.   # 主角的X坐标 $game_player.x
  17.   # 主角的Y坐标 $game_player.y
  18.   # 事件的X坐标 $game_map.events[事件的id].x
  19.   # 事件的T坐标 $game_map.events[事件的id].y
  20.   #--------------------------------------------------------------------------
  21.   def toward(x = nil, y = nil)
  22.     return if x == nil and y == nil
  23.     if x == nil
  24.       # 求坐标差
  25.       sy = @y - y
  26.       return if sy == 0
  27.       sy > 0 ? move_up : move_down
  28.     elsif y == nil
  29.       # 求坐标差
  30.       sx = @x - x
  31.       return if sx == 0
  32.       sx > 0 ? move_left : move_right
  33.     else
  34.       # 求坐标差
  35.       sx = @x - x
  36.       sy = @y - y
  37.       
  38.       # 绝对值
  39.       abs_sx = sx.abs
  40.       abs_sy = sy.abs
  41.       
  42.       return if abs_sx <= 1 and abs_sy <= 1
  43.       
  44.       # 横距离与纵距离相等的情况下
  45.       if abs_sx == abs_sy
  46.         # 随机将边数增加 1
  47.         rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
  48.       end
  49.       # 横侧距离长的情况下
  50.       if abs_sx > abs_sy
  51.         # 左右方向优先。向主角移动
  52.         sx > 0 ? move_left : move_right
  53.         if not moving? and sy != 0
  54.           sy > 0 ? move_up : move_down
  55.         end
  56.       # 竖侧距离长的情况下
  57.       else
  58.         # 上下方向优先。向主角移动
  59.         sy > 0 ? move_up : move_down
  60.         if not moving? and sx != 0
  61.           sx > 0 ? move_left : move_right
  62.         end
  63.       end
  64.     end
  65.    
  66.    
  67.   end
  68. end
复制代码

评分

参与人数 1梦石 +1 收起 理由
︶ㄣ牛排ぶ + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
10
 楼主| 发表于 2015-1-18 21:08:46 | 只看该作者
本帖最后由 幻耶 于 2015-1-18 21:12 编辑
恐惧剑刃 发表于 2015-1-18 20:57
以前写的


这样?在事件2并行事件里设置移动路线:脚本  toward($game_map.events[1].x, nil)

假设事件2始终保持与事件1的X坐标差保持0不变,并且事件2始终与事件1的Y坐标差保持5不变

囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 14:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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