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

Project1

 找回密码
 注册会员
搜索
查看: 4790|回复: 7

【崮rz】RGE制作和使用数据文件

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
238 小时
注册时间
2006-10-2
帖子
417
发表于 2009-8-7 10:04:47 | 显示全部楼层 |阅读模式
本帖最后由 猫哥哥 于 2009-8-17 11:32 编辑

先扔出最终范例和相关文件。
如下:


以下是正文:

前言: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格式导出)。然后新建数据库,并新建一个表,输入数据如下图所示。

这里我们可以看到,“ID”和“名称”这两个字段在AnimationSprite类里,并没有相应的变量。其实这两个字段只是为了便于在输入大量数据的时候,帮助自己记忆而已。

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


二、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和本文内容并无关系。

本帖子中包含更多资源

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

x

Lv1.梦旅人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2009-6-6
帖子
1732

贵宾

发表于 2009-8-7 10:09:10 | 显示全部楼层
我比较在意“本帖隐藏的内容需要积分高于 10000 才可浏览”和“等写得差不多了再解禁”.........
欢迎大家加入AGM大军
群号:82696728
AGM区:http://rpg.blue/forum-77-1.html
玛姐我爱你~玛莉妲大人鞭挞我吧!
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6545
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

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











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
238 小时
注册时间
2006-10-2
帖子
417
 楼主| 发表于 2009-8-7 13:46:32 | 显示全部楼层
本帖最后由 猫哥哥 于 2009-8-7 13:53 编辑
我比较在意“本帖隐藏的内容需要积分高于 10000 才可浏览”和“等写得差不多了再解禁”.........
我不宅 发表于 2009-8-7 10:09


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

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


RGE的脚本层的结构和RGSS差不多……多出来的那些东西,如果用不着的话,都可以根本不管的吧,就用不着头痛了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

清纯红

梦石
0
星屑
61
在线时间
65 小时
注册时间
2009-7-23
帖子
995

贵宾

发表于 2009-8-7 20:06:00 | 显示全部楼层
如果不用多出来的东西还不如用xp
就算痛也要做,宅必备宅人的必备网站
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
400 小时
注册时间
2005-10-24
帖子
634
发表于 2009-8-12 16:29:26 | 显示全部楼层
貌似REXML是纯Ruby的东西,所以其他RM也使用可能..
楼主对于XML的介绍很有帮助
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
69 小时
注册时间
2009-7-20
帖子
42
发表于 2009-10-8 01:26:40 | 显示全部楼层
才看见此贴,莫非回档了?

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

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

xp10s和vx分辨率一直纠结我,有rge会好很多。总之看游戏吧,要求高的话,用rge挺好的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

发表于 2009-10-9 23:51:12 | 显示全部楼层
本帖最后由 link006007 于 2009-10-10 00:02 编辑

RGE最大的好处是可以自由的写内嵌类  在必要的时候脱离ruby
RM的扩展主要在脚本上
RGE的扩展可以增加到内嵌代码
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 22:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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