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

Project1

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

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2013-6-30
帖子
92
跳转到指定楼层
1
发表于 2014-7-10 22:09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

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

范例

Lv2.观梦者

梦石
0
星屑
758
在线时间
2064 小时
注册时间
2011-10-3
帖子
1686
2
发表于 2014-7-11 06:53:59 | 只看该作者
你可以算好时间和速度,在数据库里做动画的时候就让坐标慢慢移动
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

3
发表于 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 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

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

点评

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

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

5
发表于 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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2013-6-30
帖子
92
6
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2013-6-30
帖子
92
7
 楼主| 发表于 2014-7-12 21:44:19 | 只看该作者
本帖最后由 俄罗斯方块 于 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来控制速度。这样就既能一帧一更新,又可以不让它播得太快就像之前那样了

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

点评

好吧。我的问题算解决了。谢谢。结贴了吧。@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 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
99
在线时间
900 小时
注册时间
2012-11-13
帖子
893
8
发表于 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 感谢帮忙

查看全部评分

废弃
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 08:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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