| 赞 | 4  | 
 
| VIP | 71 | 
 
| 好人卡 | 22 | 
 
| 积分 | 7 | 
 
| 经验 | 32145 | 
 
| 最后登录 | 2013-8-9 | 
 
| 在线时间 | 184 小时 | 
 
 
 
 
 
Lv2.观梦者 天仙 
	- 梦石
 - 0 
 
        - 星屑
 - 680 
 
        - 在线时间
 - 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 
 
测试........成功! |   
 
 
 
 |