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

Project1

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

[RMVX发布] 雪流星脚本教程第六弹:Window脚本教程三

 关闭 [复制链接]

Lv2.观梦者

天仙

梦石
0
星屑
610
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

跳转到指定楼层
1
发表于 2009-2-13 10:49:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
小幽的VX实用脚本查询手册:
VX实用脚本查询手册

说明档:
点此下载

在上次的教程中,我们在Window里面显示图标跟图片
现在开始在Window里面让图片动起来,也就是制作动画。
上一课:http://rpg.blue/viewthread.php?tid=110663

把这个制作好的动画素材放进 Graphics/System 里面


我们来自己制作暂停标记的动画。

继续上次的工程。

把上次 refresh 内容清空
就是剩下

  1. def refresh
  2. end
复制代码

然後加上 update

  1. def update
  2.   super
  3. end
复制代码

第一句的 super 是要调用父类的同名方法,避免覆盖掉原来的内容。
(其实是覆盖掉,但是又调用父类里面的「备份」内容)

接下来在 initialize 里面加上
@pause_bitmap = Cache.system("window_pause")
在上一次的教程里,我们说过,这是用来载入并保存 Graphics/System 文件夹的图片

好,然後在 update 里面的 super 下面加上

  1. fcx = ((Graphics.frame_count%32)/8)*16
  2. rect = Rect.new(fcx, 0, 16, 16)
  3. self.contents.clear_rect(0, 0, 16, 16)
  4. 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 里面添加

  1. @pause_sprite = Sprite.new
  2. @pause_sprite.bitmap = Cache.system("window_pause")
  3. @pause_sprite.x = x + 16
  4. @pause_sprite.y = y + 16
  5. @pause_sprite.z = self.z + 1
  6. @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 里面加上

  1. fcx = ((Graphics.frame_count%32)/8)*16
  2. @pause_sprite.src_rect = Rect.new(fcx, 0, 16, 16)
复制代码

第一句跟前面的一样
第二句是更新精灵的 src_rect

测试........成功!
VA脚本开工中...
偷窃脚本1.0 - 已完成
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-8
帖子
142
2
发表于 2009-2-13 12:47:11 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
7 小时
注册时间
2009-2-10
帖子
16
3
发表于 2009-2-19 00:22:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

4
发表于 2009-2-19 04:15:53 | 只看该作者
相信是雪流星不经意之间的笔误(?),已经修正
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
7 小时
注册时间
2009-2-10
帖子
16
5
发表于 2009-2-19 05:35:32 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
610
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

6
 楼主| 发表于 2009-2-19 20:01:57 | 只看该作者
多谢精灵帮忙修正笔误{/gg}

第二个问题:
会出现两个箭头是因为 Scene_Map 里面的 Window_Message 本身也带着一个隐藏的 Window_Gold
就是在对话中用 \g 会出现的那个
把你现在新写的这个改名成 Window_Gold2 重新调用就不会出现了

VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
7 小时
注册时间
2009-2-10
帖子
16
7
发表于 2009-2-19 20:56:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
525
在线时间
0 小时
注册时间
2009-2-10
帖子
4
8
发表于 2009-7-16 16:19:13 | 只看该作者
吼吼,新鸟来学习,还有后续么?!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
334
在线时间
453 小时
注册时间
2009-10-2
帖子
125
9
发表于 2010-9-8 21:21:39 | 只看该作者
后续呀,楼主
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-20 06:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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