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

Project1

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

[已经解决] 请问如何使动画播放在点(x,y)

[复制链接]

Lv1.梦旅人

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

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

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

x
本帖最后由 asdwds 于 2013-6-30 22:13 编辑

自带的播放动画都需要事件或者玩家来做原点。
我想要让动画播放在点(X,Y)
请问有什么建议吗?或者有没有类似的演示?

我试着写了一个Sprite_anime,然后它可以显示图片,但是因为不自动更新
所以不显示变化,试着在Spriteset_Map里面加了@spell.update (@spell是Sprite_anime.new),从而让其更新
Sprite_anime基本就是Sprite_Base的动画部分,其update里面是update_animation
但是告诉我 undefined method ”update “ for nil :NilClass

--------

所以如何使动画播放在某个点的位置上?
1

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
帖子
424
2
发表于 2013-7-1 01:20:45 手机端发表。 | 只看该作者
在地图上显示吗?如果是就直接把一个空事件移动到你需要的位置 ,然后再在该事件上显示动画即可。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
帖子
128
3
 楼主| 发表于 2013-7-2 12:27:11 | 只看该作者
SuperMario 发表于 2013-7-1 01:20
在地图上显示吗?如果是就直接把一个空事件移动到你需要的位置 ,然后再在该事件上显示动画即可。 ...

同一个事件上能显示2个或更多的动画吗?我关键是要能够一个地方同时播放多个动画

另外空事件亦然不效率,就算不追求同一个地方播放多个动画,同时播放多个动画他都完成不了
除非我弄很多备用的空事件。然后我还要判断哪个空事件正在被用来放动画了
相当不效率
1
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

4
发表于 2013-7-2 14:41:39 | 只看该作者
本帖最后由 Sion 于 2013-7-2 19:12 编辑

你可以自己写一个类来代替Sprite_Character里的@character,以此来确定动画精灵的显示坐标(参考精灵里的 update_position 方法需要使用到的 character 的数据)。
精灵也最好新建一个类(Sprite_Animation < Sprite_Base),剔除掉那些Sprite_Character里没必要调用的方法,应该是只需要要 update_position 和 update_animation 就可以

然后建立一个数组来管理,动画开始向数组里压入动画精灵,参数characer 使用新类,并设定好坐标。播放完毕后,释放并从数组中删除即可。

1.0版本VA地图显示动画有点问题,不会随着事件移动,需要打SP1补丁。


----------------------------------------------------------------
补充:

存档的时候是无法保存精灵类的。这也是人物跟精灵是分开的两个类的原因。处理数据的时候需要注意一下这个。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
帖子
128
5
 楼主| 发表于 2013-7-3 12:18:04 | 只看该作者
Sion 发表于 2013-7-2 14:41
你可以自己写一个类来代替Sprite_Character里的@character,以此来确定动画精灵的显示坐标(参考精灵里的 u ...

< Sprite_Base 是必须的吗?有了这个所以才会被Spriteset更新吗?
1
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

6
发表于 2013-7-3 12:49:40 | 只看该作者
asdwds 发表于 2013-7-3 12:18
< Sprite_Base 是必须的吗?有了这个所以才会被Spriteset更新吗?


不是,你要自己更新它。
建议你用数组来管理播放动画的精灵,播放的时候往数组里添加,播放完毕再删除就可以了。

这是我用的方法,是用类变量来管理他们,你可以参考一下:
  1. class Animation

  2.   @@ended_animations = []
  3.   @@animations = []
  4.   
  5.   def self.update
  6.     @@ended_animations.clear
  7.     @@animations.each {|anime| anime.update_animation}
  8.     @@animations -= @@ended_animations # 在这里删除播放完毕的动画
  9.   end
  10.   def self.start_animation(id, target, zoom_rate, mirror, viewport)
  11.     @@animations.push(Animation.new(id, target, zoom_rate, mirror, viewport))
  12.   end

  13. #...

  14.   # 播放完毕释放动画精灵
  15.   def end_animation
  16.     #...
  17.     @ani_sprites.each {|sprite| sprite.dispose}
  18.     @@ended_animations.push(self)
  19.   end
  20. end
复制代码
在Spriteset_Map里添加方法更新他们:
  1.   def update_animations
  2.     Animation::update
  3.   end
  4.   # 播放动画精灵,当然如果要调用这个方法还得首先读取到Scene_Map里的@spriteset,对它调用
  5.   def start_animation(id, target, zoom_rate = 0.25, mirror = false)
  6.     Animation::start_animation(id, target, zoom_rate, mirror, @viewport1)
  7.   end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
帖子
128
7
 楼主| 发表于 2013-7-3 16:40:56 | 只看该作者
Sion 发表于 2013-7-3 12:49
不是,你要自己更新它。
建议你用数组来管理播放动画的精灵,播放的时候往数组里添加,播放完毕再删除就 ...

原来class名::这样就可以调用那个class里面的东西吗?我以为是只有moudule

点评

只能调用类方法 def self.xxxxx  发表于 2013-7-3 16:43
1
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
帖子
128
8
 楼主| 发表于 2013-7-3 16:57:46 | 只看该作者
Sion 发表于 2013-7-3 12:49
不是,你要自己更新它。
建议你用数组来管理播放动画的精灵,播放的时候往数组里添加,播放完毕再删除就 ...

还有一个问题,数组的[-1]是指最后一个数组中的数据吗?

点评

嗯  发表于 2013-7-3 16:59
1
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
帖子
128
9
 楼主| 发表于 2013-7-3 17:54:39 | 只看该作者
本帖最后由 asdwds 于 2013-7-3 18:03 编辑
Sion 发表于 2013-7-3 12:49
不是,你要自己更新它。
建议你用数组来管理播放动画的精灵,播放的时候往数组里添加,播放完毕再删除就 ...


还有几个问题。

在地图事件里写 @anime = Sprite.new后
@anime.update是不是指让@anime更新?
如果不是的话,如何让特定的一个实例变量运行class里面定义的内容

设置@x,@y就可以达到改变实例的位置吗?

viewport必须要用到吗?Viewport.new就可以了吗?
1
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

10
发表于 2013-7-3 18:13:03 | 只看该作者
本帖最后由 Sion 于 2013-7-3 18:14 编辑

1.update 只是一个方法名。你要更新数据,肯定要通过调用一个方法来实现。

2.参考 Game_CharacterBase 里的 screen_x 与 screen_y 方法,事件的精灵坐标是通过这个来计算的

3. Viewport 不是必要的,F1 里写得很清楚了。使用方法参考 Spriteset_Map 里面定义的几个 Viewport。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-5 08:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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