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

Project1

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

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
帖子
128
跳转到指定楼层
发表于 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
在线时间
54 小时
注册时间
2013-1-3
帖子
128
13
 楼主| 发表于 2013-7-3 19:41:42 | 只看该作者
芙蕾娅 发表于 2013-7-3 18:58
我记得Sprite_Base里有start_animation?

其实我原本想问的是如何在同一个地方放多个动画。
因为自带的start_animation只能在一个事件或者玩家上放一个动画
所以我就想弄一个新的。

大部分sion已经给了提示了,接下来我自己一个人研究就够了
谢谢Freya

评分

参与人数 1星屑 +140 收起 理由
芙蕾娅 + 140 我什么都没帮到才不好意思呢

查看全部评分

1
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
帖子
128
12
 楼主| 发表于 2013-7-3 19:37:13 | 只看该作者
Sion 发表于 2013-7-3 18:13
1.update 只是一个方法名。你要更新数据,肯定要通过调用一个方法来实现。

2.参考 Game_CharacterBase 里 ...

对不起,我没写完。感谢sion回答了我很多问题。这些能实践的我会自己去实践的。
1
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
帖子
128
11
 楼主| 发表于 2013-7-3 19:23:13 | 只看该作者
Sion 发表于 2013-7-3 18:13
1.update 只是一个方法名。你要更新数据,肯定要通过调用一个方法来实现。

2.参考 Game_CharacterBase 里 ...

我写了一个class a,设置@a = a.new
class a
  attr_accessor :b
  def initialize
    @b = 1
end
end

@a.b 是指向了@b吗?

点评

指向@a里的实例变量@b,这种东西你自己运行试一试不就知道了..  发表于 2013-7-3 19:35
1
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
2073
在线时间
920 小时
注册时间
2012-10-18
帖子
428

开拓者

10
发表于 2013-7-3 18:58:36 | 只看该作者
我记得Sprite_Base里有start_animation?
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

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

贵宾

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
帖子
128
8
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

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

点评

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

使用道具 举报

Lv2.观梦者 (暗夜天使)

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

贵宾

5
发表于 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
4
 楼主| 发表于 2013-7-3 12:18:04 | 只看该作者
Sion 发表于 2013-7-2 14:41
你可以自己写一个类来代替Sprite_Character里的@character,以此来确定动画精灵的显示坐标(参考精灵里的 u ...

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-19 00:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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