查看: 2482|回复: 7

[已经解决] 地图上动画与事件坐标不同步的问题

[复制链接]
梦石
0
星屑
50
在线时间
130 小时
注册时间
2013-6-30
回帖
76
发表于 2014-7-10 22:09:48 | 显示全部楼层 |阅读模式

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

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

×
问题不太好描述,已做好范例。很小的。我一下就上传完了。

在范例中可以看到,在开关打开前,动画一直在某个地方放,而播放动画的事件却可以跑出去很远。当开关打开后,动画便与人物同步了。
我在脚本Sprite_Base的214与215行添加了如下内容来实现以上效果。
  1.       sprite.x = @character.screen_x if $switch==1
  2.       sprite.y = @character.screen_y if $switch==1
复制代码
可以用全局查找$switch到达
那么问题来了:你也看到了同步后的动画只能用卡来形容。和那个跑动的事件完全不是同一个FPS。求如何才能使动画与那个事件真正的同步?

Project1.rar

1.42 MB, 下载次数: 74

范例

梦石
0
星屑
803
在线时间
2068 小时
注册时间
2011-10-3
回帖
1620
发表于 2014-7-11 06:53:59 | 显示全部楼层
你可以算好时间和速度,在数据库里做动画的时候就让坐标慢慢移动
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-11 06:58:14 | 显示全部楼层
本帖最后由 taroxd 于 2014-7-11 08:15 编辑
布里蓝 发表于 2014-7-11 06:53
你可以算好时间和速度,在数据库里做动画的时候就让坐标慢慢移动


数据库里的移动范围没有那么大的。

我运行楼主的范例,两种状态下 FPS 都为 60。可能只是动画的移动让你产生了不流畅的感觉吧。

注意动画1秒为15帧。

点评

对,动画的移动太不流畅了。  发表于 2014-7-11 21:46

评分

参与人数 1星屑 +33 收起 理由
VIPArcher + 33 我很赞同

查看全部评分

回复

使用道具 举报

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-7-11 11:38:32 | 显示全部楼层
我试了一下,FPS无变化(按F2查看),楼主觉得卡的原因应该是每帧的都移动一次,视觉上看起来不连贯的原因。
这里有@Sion 大大的箭矢类动画脚本 你可以参考一下,或者直接用这个好了
在第五个,有范例

点评

没注意加入方式居然是自由加入。。。谢谢了,我好好看看。  发表于 2014-7-11 23:28
你进他组群不就好了,  发表于 2014-7-11 21:53
无。。无访问权限。。。。  发表于 2014-7-11 21:47
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-11 12:05:38 来自手机 | 显示全部楼层
VIPArcher 发表于 2014-7-11 11:38
我试了一下,FPS无变化(按F2查看),楼主觉得卡的原因应该是每帧的都移动一次,视觉上看起来不连贯的原因 ...

原因是动画每4帧更新一次……

点评

也就是说我的问题等价于“如何让动画每帧更新一次”咯?  发表于 2014-7-11 21:47
(⊙o⊙)哦,那就4帧吧 不要在意细节 23333  发表于 2014-7-11 12:07
回复

使用道具 举报

梦石
0
星屑
50
在线时间
130 小时
注册时间
2013-6-30
回帖
76
 楼主| 发表于 2014-7-11 21:52:31 | 显示全部楼层
布里蓝 发表于 2014-7-11 06:53
你可以算好时间和速度,在数据库里做动画的时候就让坐标慢慢移动

每个动画算一次吗{:2_276:}
我希望能通过改脚本实现精灵每帧刷新一次的效果。

点评

修改 Sprite_Base#set_animation_rate 改成每帧一刷新的话播太快不要找我  发表于 2014-7-12 06:24
这样啊,我以为是随机的,那么就等大神来回答吧。  发表于 2014-7-11 23:55
嗯。而且动画也不只是一个。总之没法人工去算就是了。 而且就算人工去算,那么动画也只能是4帧更新一次。看上去就像FPS=15一样。  发表于 2014-7-11 23:30
难道你的移动是随机的?  发表于 2014-7-11 22:45
回复

使用道具 举报

梦石
0
星屑
50
在线时间
130 小时
注册时间
2013-6-30
回帖
76
 楼主| 发表于 2014-7-12 21:44:19 | 显示全部楼层
本帖最后由 俄罗斯方块 于 2014-7-12 21:48 编辑

@VIPArcher
@taroxd

就范例,我先是照着把Sprite_Base里的@ani_rate改成了1,然后那个奇葩的效果让我明白了动画为什么4帧更新一次,也就是说为什么FPS看上去像15。
然后我把原来的update_animation给改成了这样
[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 更新动画
  #--------------------------------------------------------------------------
  def update_animation
    return unless animation?
    @ani_duration -= 1
    if @ani_duration % 1 == 0
      if @ani_duration > 0
        frame_index = @animation.frame_max
        frame_index -= 1+ @ani_duration / @ani_rate
        animation_set_sprites(@animation.frames[frame_index])
        if @ani_duration % @ani_rate == 0
          @animation.timings.each do |timing|
            animation_process_timing(timing) if timing.frame == frame_index
          end
        end
      else
        end_animation
      end
    end
  end[/pre]
嗯,粗略的说就是把原来许多@ani_rate都换成1让它一帧更新一次,然后把
[pre lang="ruby" line="1"] @animation.timings.each do |timing|
         animation_process_timing(timing) if timing.frame == frame_index
end[/pre]
这个单独分离开,用@ani_rate来控制速度。这样就既能一帧一更新,又可以不让它播得太快就像之前那样了

这是不是算解决了?我还想提问题是不是该另开帖啦?

点评

好吧。我的问题算解决了。谢谢。结贴了吧。@taroxd  发表于 2014-7-13 11:08
开吧-。-  发表于 2014-7-13 06:57
靠靠我的@怎么用不起。。。  发表于 2014-7-12 21:49
@taroxd  发表于 2014-7-12 21:46

评分

参与人数 1星屑 +66 收起 理由
VIPArcher + 66 塞糖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
124
在线时间
900 小时
注册时间
2012-11-13
回帖
845
发表于 2014-7-13 19:44:14 | 显示全部楼层
如何让动画每帧更新一次
  1. #==============================================================================
  2. # F11 - 动画速度 - By芙蕾娅
  3. #------------------------------------------------------------------------------
  4. #  ★ - 新增  ☆ - 修改  ■ - 删除 ● - 无变更
  5. #==============================================================================
  6. module Freya
  7.   # 动画的速度,数目越小动画越快
  8.   AnimationSpeed = 1 # 默认速度为4
  9. end
  10. #==============================================================================
  11. # ■ Sprite_Base
  12. #------------------------------------------------------------------------------
  13. #  添加了显示动画功能的精灵。
  14. #==============================================================================
  15. class Sprite_Base < Sprite
  16.   #--------------------------------------------------------------------------
  17.   # ☆ 设置动画的速度
  18.   #--------------------------------------------------------------------------
  19.   def set_animation_rate
  20.     @ani_rate = Freya::AnimationSpeed     # 固定的默认值
  21.   end
  22. end
复制代码

评分

参与人数 1星屑 +66 收起 理由
VIPArcher + 66 感谢帮忙

查看全部评分

废弃
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部