Project1

标题: 【崮rz】RGE制作和使用数据文件 [打印本页]

作者: 猫哥哥    时间: 2009-8-7 10:04
标题: 【崮rz】RGE制作和使用数据文件
本帖最后由 猫哥哥 于 2009-8-17 11:32 编辑

先扔出最终范例和相关文件。
如下:
[attach]4916[/attach]

以下是正文:

前言:RGE1.0发布已经有很长一段时间了,但是看样子真正用的人并不是很多。除了大多数人不懂脚本,懂脚本的人又比较懒惰于适应部分脚本的变动这些原因外,最主要的原因,应该还是因为缺乏可视化的地图编辑器和数据库编辑器吧。今天这篇文章,便是我在自制数据文件中总结出来的一点自己的心得,希望能给有这方面需求的朋友们一个可供交流的思路。

这篇文章假定读者已经具备以下条件:
1.对数据库有了解,会基本的数据库软件操作
2.了解xml文件格式
3.会使用ruby脚本

看了以上内容,相信有人已经猜到了数据文件是怎么做成的……没错,主要的步骤就是:1.数据库软件制作数据并导出xml文件;2.ruby脚本处理xml生成类似rxdata\rvdata的文件;3.在RGE里写出相应的类,读取并使用数据文件。


一、使用数据库软件制作数据

今天这篇文章,主要是以自制的动画数据文件为例。制作一个自定义的数据文件,首先要想好,在ruby脚本里需要怎么使用它。于是在这里,预先设计好一个AnimationSprite类,如下
  1. class AnimationSprite
  2.   
  3.   attr_accessor :direction  #方向数
  4.   attr_accessor :f          #帧数
  5.   attr_accessor :width      #单帧宽度
  6.   attr_accessor :height     #单帧高度
  7.   attr_accessor x         #关键点x坐标
  8.   attr_accessor y         #关键点y坐标
  9.   attr_accessor :fs         #帧速
  10.   attr_accessor :name       #贴图文件名称
  11.   attr_accessor :loop       #循环标志

  12. end
复制代码
然后打开数据库软件(这里我用的随处可见的MS Office Access 2007,你也可以使用其他的数据库软件,只要你能从中将数据以xml格式导出)。然后新建数据库,并新建一个表,输入数据如下图所示。
[attach]4103[/attach]
这里我们可以看到,“ID”和“名称”这两个字段在AnimationSprite类里,并没有相应的变量。其实这两个字段只是为了便于在输入大量数据的时候,帮助自己记忆而已。

数据输入完毕后,就可以保存并导出xml文件了。这里示例的MS Office Access 2007,可以很方便地导出xml。单击“外部数据”选项卡,在“导出”里点击“其他”,然后就能看到导出为xml文件的选项了。
[attach]4104[/attach]

二、ruby脚本处理xml文件

xml格式是现在比较流行的数据交换的格式,理所当然地,ruby也提供了xml文件的解析这样的附加库。

于是用如下代码,来解析并转换由数据库导出的xml文件:
  1. require 'rexml/document'
  2. include REXML

  3. #解析xml文件
  4. input = File.new("animatiom.xml")
  5. doc = Document.new(input)

  6. root = doc.root #取得根节点

  7. temp = []

  8. #遍历animation节点下的所有节点,并储存到临时的数组里
  9. #节点的内容默认都是字符串,所以根据AnimationSprite的结构,做必要的类型转换
  10. doc.elements.each("*/animatiom") do |e|
  11.         ary = []
  12.         ary.push e.elements[3].text.to_i  #方向数
  13.         ary.push e.elements[4].text.to_i  #帧数
  14.         ary.push e.elements[5].text.to_i  #单帧宽度
  15.         ary.push e.elements[6].text.to_i  #单帧高度
  16.         ary.push e.elements[7].text.to_i  #关键点x坐标
  17.         ary.push e.elements[8].text.to_i  #关键点y坐标
  18.         ary.push e.elements[9].text.to_i  #帧速
  19.         ary.push e.elements[10].text        #贴图文件名称
  20.         ary.push e.elements[11].text == "1"?true:false   #循环标志
  21.         temp.push ary
  22. end

  23. #生成序列化文件
  24. f = File.open("animation_data.rvdata","wb")
  25. Marshal.dump(temp,f)
  26. 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和本文内容并无关系。
作者: 我不宅    时间: 2009-8-7 10:09
我比较在意“本帖隐藏的内容需要积分高于 10000 才可浏览”和“等写得差不多了再解禁”.........
作者: 后知后觉    时间: 2009-8-7 11:35
我现在非常想要的是RGE里那个chm文件里写的一些方法的参数的具体作用- -
不是专业人士去摸索那些参数的用途好头痛,好费时- -
作者: 猫哥哥    时间: 2009-8-7 13:46
本帖最后由 猫哥哥 于 2009-8-7 13:53 编辑
我比较在意“本帖隐藏的内容需要积分高于 10000 才可浏览”和“等写得差不多了再解禁”.........
我不宅 发表于 2009-8-7 10:09


今天就能写完,刚才睡觉去了。再说这个区本来人就不多……

我现在非常想要的是RGE里那个chm文件里写的一些方法的参数的具体作用- -
不是专业人士去摸索那些参数的用途好头痛,好费时- -
后知后觉 发表于 2009-8-7 11:35


RGE的脚本层的结构和RGSS差不多……多出来的那些东西,如果用不着的话,都可以根本不管的吧,就用不着头痛了……
作者: 赤点    时间: 2009-8-7 20:06
如果不用多出来的东西还不如用xp
作者: 叶子    时间: 2009-8-12 16:29
貌似REXML是纯Ruby的东西,所以其他RM也使用可能..
楼主对于XML的介绍很有帮助
作者: 白化柳之一    时间: 2009-10-8 01:26
才看见此贴,莫非回档了?

目前觉得,rge用的不多和没有出来一个好的游戏有关。
至于可视化编辑器,我自己编了个,自己用。所以相信有人也自己编,不过都没有放出来。
rge的主要意义我觉得如下:
脱离了 rm这一版权的纠纷,也许会出现连程序都“原创”的游戏。

图片的反转锯齿的效果比较好。尤其是执行一些简单3d脚本的时候速度上来了。
在nds屏幕范围内可以实现不卡。速度破限。

xp10s和vx分辨率一直纠结我,有rge会好很多。总之看游戏吧,要求高的话,用rge挺好的
作者: link006007    时间: 2009-10-9 23:51
本帖最后由 link006007 于 2009-10-10 00:02 编辑

RGE最大的好处是可以自由的写内嵌类  在必要的时候脱离ruby
RM的扩展主要在脚本上
RGE的扩展可以增加到内嵌代码




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1