赞 | 5 |
VIP | 71 |
好人卡 | 22 |
积分 | 6 |
经验 | 32145 |
最后登录 | 2013-8-9 |
在线时间 | 184 小时 |
Lv2.观梦者 天仙
- 梦石
- 0
- 星屑
- 620
- 在线时间
- 184 小时
- 注册时间
- 2008-4-15
- 帖子
- 5023
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
小幽的VX实用脚本查询手册:
VX实用脚本查询手册
说明档:
点此下载
在上次的教程中,我们在Window里面显示图标跟图片
现在开始在Window里面让图片动起来,也就是制作动画。
上一课:http://rpg.blue/viewthread.php?tid=110663
把这个制作好的动画素材放进 Graphics/System 里面
我们来自己制作暂停标记的动画。
继续上次的工程。
把上次 refresh 内容清空
就是剩下
然後加上 update
第一句的 super 是要调用父类的同名方法,避免覆盖掉原来的内容。
(其实是覆盖掉,但是又调用父类里面的「备份」内容)
接下来在 initialize 里面加上
@pause_bitmap = Cache.system("window_pause")
在上一次的教程里,我们说过,这是用来载入并保存 Graphics/System 文件夹的图片
好,然後在 update 里面的 super 下面加上
- fcx = ((Graphics.frame_count%32)/8)*16
- rect = Rect.new(fcx, 0, 16, 16)
- self.contents.clear_rect(0, 0, 16, 16)
- self.contents.blt(0, 0, @pause_bitmap, rect)
复制代码
解释:
fcx = ((Graphics.frame_count%32)/8)*16
呵呵,这个公式是不是看起来很奇怪呢?
其实 (Graphics.frame_count%32)/8
这段是让我们的动画 每8桢 换一个图像
也就是0~7的时候显示第一个图像、7~15的时候显示第二个图像...依此类推
这样它的速度才不会太快
*16 就是计算每一桢的 X 座标
rect = Rect.new(fcx, 0, 16, 16)
就是根据上一句算出来的X座标来读取图片
self.contents.clear_rect(0, 0, 16, 16)
参数是 X座标、Y座标、宽、高,也可以是一个 rect 对象
跟 self.contents.clear 一样,是「擦子」的作用
不过这个只限定於由4个参数所形成的 rect 来清除
最後用self.contents.blt(0, 0, @pause_bitmap, rect)显示
测试........成功!
不过这个方法有一个问题,那就是如果动画图片下面有文字(或其他图片)
调用 self.contents.clear_rect 的时候,下面的文字/图片也会被清掉
所以再来讲解一个用精灵显示动画的方法,顺便讲解精灵(Sprite)是什麽。
在 initialize 里面添加
- @pause_sprite = Sprite.new
- @pause_sprite.bitmap = Cache.system("window_pause")
- @pause_sprite.x = x + 16
- @pause_sprite.y = y + 16
- @pause_sprite.z = self.z + 1
- @pause_sprite.src_rect = Rect.new(0, 0, 16, 16)
复制代码
解释:
@pause_sprite = Sprite.new
生成一个新的精灵(sprite)对象,可以用一个 viewport 对象作为参数(非必要)。
精灵就是用来在画面上显示图片的,RM中所有的图片都是用精灵显示出来的。
@pause_sprite.bitmap = Cache.system("window_pause")
载入图片,保存精灵的bitmap属性中
@pause_sprite.x = x + 16
@pause_sprite.y = y + 16
@pause_sprite.z = self.z + 1
设定 X、Y、Z座标,不用多说了吧= =
@pause_sprite.src_rect = Rect.new(0, 0, 16, 16)
这个跟
self.contents.blt(0, 0, @pause_bitmap, rect)
里面的 rect 是一样的作用,限制图片显示的区域
再来在 update 里面加上
- fcx = ((Graphics.frame_count%32)/8)*16
- @pause_sprite.src_rect = Rect.new(fcx, 0, 16, 16)
复制代码
第一句跟前面的一样
第二句是更新精灵的 src_rect
测试........成功! |
|