Project1

标题: 地图上动画与事件坐标不同步的问题 [打印本页]

作者: 俄罗斯方块    时间: 2014-7-10 22:09
标题: 地图上动画与事件坐标不同步的问题
问题不太好描述,已做好范例。很小的。我一下就上传完了。

在范例中可以看到,在开关打开前,动画一直在某个地方放,而播放动画的事件却可以跑出去很远。当开关打开后,动画便与人物同步了。
我在脚本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, 下载次数: 73

范例


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


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

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

注意动画1秒为15帧。
作者: VIPArcher    时间: 2014-7-11 11:38
我试了一下,FPS无变化(按F2查看),楼主觉得卡的原因应该是每帧的都移动一次,视觉上看起来不连贯的原因。
这里有@Sion 大大的箭矢类动画脚本 你可以参考一下,或者直接用这个好了
在第五个,有范例
作者: taroxd    时间: 2014-7-11 12:05
VIPArcher 发表于 2014-7-11 11:38
我试了一下,FPS无变化(按F2查看),楼主觉得卡的原因应该是每帧的都移动一次,视觉上看起来不连贯的原因 ...

原因是动画每4帧更新一次……
作者: 俄罗斯方块    时间: 2014-7-11 21:52
布里蓝 发表于 2014-7-11 06:53
你可以算好时间和速度,在数据库里做动画的时候就让坐标慢慢移动

每个动画算一次吗{:2_276:}
我希望能通过改脚本实现精灵每帧刷新一次的效果。
作者: 俄罗斯方块    时间: 2014-7-12 21:44
本帖最后由 俄罗斯方块 于 2014-7-12 21:48 编辑

@VIPArcher
@taroxd

就范例,我先是照着把Sprite_Base里的@ani_rate改成了1,然后那个奇葩的效果让我明白了动画为什么4帧更新一次,也就是说为什么FPS看上去像15。
然后我把原来的update_animation给改成了这样
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 更新动画
  3.   #--------------------------------------------------------------------------
  4.   def update_animation
  5.     return unless animation?
  6.     @ani_duration -= 1
  7.     if @ani_duration % 1 == 0
  8.       if @ani_duration > 0
  9.         frame_index = @animation.frame_max
  10.         frame_index -= 1+ @ani_duration / @ani_rate
  11.         animation_set_sprites(@animation.frames[frame_index])
  12.         if @ani_duration % @ani_rate == 0
  13.           @animation.timings.each do |timing|
  14.             animation_process_timing(timing) if timing.frame == frame_index
  15.           end
  16.         end
  17.       else
  18.         end_animation
  19.       end
  20.     end
  21.   end

嗯,粗略的说就是把原来许多@ani_rate都换成1让它一帧更新一次,然后把
RUBY 代码复制
  1. @animation.timings.each do |timing|
  2.          animation_process_timing(timing) if timing.frame == frame_index
  3. end

这个单独分离开,用@ani_rate来控制速度。这样就既能一帧一更新,又可以不让它播得太快就像之前那样了

这是不是算解决了?我还想提问题是不是该另开帖啦?
作者: 3106345123    时间: 2014-7-13 19:44
如何让动画每帧更新一次
  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
复制代码





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