赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 38864 |
最后登录 | 2013-9-8 |
在线时间 | 238 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 238 小时
- 注册时间
- 2006-10-2
- 帖子
- 417
|
本帖最后由 猫哥哥 于 2009-8-17 11:32 编辑
先扔出最终范例和相关文件。
如下:
以下是正文:
前言:RGE1.0发布已经有很长一段时间了,但是看样子真正用的人并不是很多。除了大多数人不懂脚本,懂脚本的人又比较懒惰于适应部分脚本的变动这些原因外,最主要的原因,应该还是因为缺乏可视化的地图编辑器和数据库编辑器吧。今天这篇文章,便是我在自制数据文件中总结出来的一点自己的心得,希望能给有这方面需求的朋友们一个可供交流的思路。
这篇文章假定读者已经具备以下条件:
1.对数据库有了解,会基本的数据库软件操作
2.了解xml文件格式
3.会使用ruby脚本
看了以上内容,相信有人已经猜到了数据文件是怎么做成的……没错,主要的步骤就是:1.数据库软件制作数据并导出xml文件;2.ruby脚本处理xml生成类似rxdata\rvdata的文件;3.在RGE里写出相应的类,读取并使用数据文件。
一、使用数据库软件制作数据
今天这篇文章,主要是以自制的动画数据文件为例。制作一个自定义的数据文件,首先要想好,在ruby脚本里需要怎么使用它。于是在这里,预先设计好一个AnimationSprite类,如下- class AnimationSprite
-
- attr_accessor :direction #方向数
- attr_accessor :f #帧数
- attr_accessor :width #单帧宽度
- attr_accessor :height #单帧高度
- attr_accessor x #关键点x坐标
- attr_accessor y #关键点y坐标
- attr_accessor :fs #帧速
- attr_accessor :name #贴图文件名称
- attr_accessor :loop #循环标志
- end
复制代码 然后打开数据库软件(这里我用的随处可见的MS Office Access 2007,你也可以使用其他的数据库软件,只要你能从中将数据以xml格式导出)。然后新建数据库,并新建一个表,输入数据如下图所示。
这里我们可以看到,“ID”和“名称”这两个字段在AnimationSprite类里,并没有相应的变量。其实这两个字段只是为了便于在输入大量数据的时候,帮助自己记忆而已。
数据输入完毕后,就可以保存并导出xml文件了。这里示例的MS Office Access 2007,可以很方便地导出xml。单击“外部数据”选项卡,在“导出”里点击“其他”,然后就能看到导出为xml文件的选项了。
二、ruby脚本处理xml文件
xml格式是现在比较流行的数据交换的格式,理所当然地,ruby也提供了xml文件的解析这样的附加库。
于是用如下代码,来解析并转换由数据库导出的xml文件:- require 'rexml/document'
- include REXML
- #解析xml文件
- input = File.new("animatiom.xml")
- doc = Document.new(input)
- root = doc.root #取得根节点
- temp = []
- #遍历animation节点下的所有节点,并储存到临时的数组里
- #节点的内容默认都是字符串,所以根据AnimationSprite的结构,做必要的类型转换
- doc.elements.each("*/animatiom") do |e|
- ary = []
- ary.push e.elements[3].text.to_i #方向数
- ary.push e.elements[4].text.to_i #帧数
- ary.push e.elements[5].text.to_i #单帧宽度
- ary.push e.elements[6].text.to_i #单帧高度
- ary.push e.elements[7].text.to_i #关键点x坐标
- ary.push e.elements[8].text.to_i #关键点y坐标
- ary.push e.elements[9].text.to_i #帧速
- ary.push e.elements[10].text #贴图文件名称
- ary.push e.elements[11].text == "1"?true:false #循环标志
- temp.push ary
- end
- #生成序列化文件
- f = File.open("animation_data.rvdata","wb")
- Marshal.dump(temp,f)
- f.close
复制代码 假如你电脑里装有ruby1.8以上版本(这个xml解析好像是1.7以后就有的),就可以直接使用上述代码了。如果没有安装的话,也没有关系,使用我提供的范例文件里“xml to rvdata”文件夹下的工程就行了。
三、RGE里读取数据
好了。通过以上两个还算“简单”的步骤,终于由得到了可以直接在游戏脚本里用load_data()来读取的序列化文件animation_data.rvdata了。
之前我们已经将xml数据转换成了一个ruby的数组数据存储在了animation_data.rvdata中,当然,你也可以直接生成Animation对象后序列化。具体的数据读取与转换,就看范例文件吧。
p.s. 8月17日对范例文件作了更新,改掉了里面响应鼠标的一个小bug。不过这个bug和本文内容并无关系。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
|