查看: 4510|回复: 10

[RMVA发布] 【VA】 新人 测试动态事件

[复制链接]
梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-10-1
回帖
29
发表于 2012-10-6 17:53:01 | 显示全部楼层 |阅读模式

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

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

×
在朋友推荐下,国庆节玩了玩rmva。不会ruby。拿了两天来看ruby脚本,跟c++差不多,继承性上有差别。拿了两天来看内置的脚本(还没看完),摸清了大概的流程。大概是对的吧。这把看到的东西跟大家分享哈。

整个脚本单线程加上估计软中断的技术整出来的。有很多全局变量,其中$game_map中有个成员是events,初始化的时候将地图数据中的event添加到events数组中。然后一个是循环不停的遍历执行各个event中的update函数。但是根据代码,只要一个类有update函数就可以加到events中,他就会不断调用这个类的update。

为了不与源代码冲突,我在Game_Map中添加了一个usr_events变量,初始化为空数组。在Game_Map的update中也不断执行usr_events中各成员的update。
QQ截图20121006172003.png
QQ截图20121006171915.png
不晓得图片能看到不。。

然后写一个新的基类Game_Usr_Eventbase。其中就两个函数一个将自己加到usr_events,一个是从usr_events删除自身。
QQ截图20121006172357.png

下面来测试下它是否正常工作。
写一个类继承Game_Usr_Eventbase,功能就是在若干秒过后显示"you are die!"(好像英语有问题。)。要用到一个定时器,定时器到的时候会自动将@timer_come置1。
QQ截图20121006173640.png

这个有个问题是谁来调用Game_Usr_Event的add_to_array函数,我的做法是将其嵌入到地图event中,地图event初始化会在地图切换的时候完成。将这个event设置成自动执行,并且在加入自定义的类之后将触发器取消。这样在加载好地图的同时执行地图event,并且用地图event调用add_to_array,然后取消地图event的触发器,使之后不重复执行。先要将@Game_Event中的trigger设置成attr_accessor。注意usr_event要有机制在update中调用delete_from_array。
QQ截图20121006174646.png

然后以调试模式启动游戏(打开console的情况下),执行结果就是两秒过后弹出字符串“you are die!”。
QQ截图20121006175119.png


梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-10-1
回帖
29
 楼主| 发表于 2012-10-6 18:06:57 | 显示全部楼层
回复字数要好多啊。。。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
210 小时
注册时间
2012-2-15
回帖
124
发表于 2012-10-6 18:40:31 | 显示全部楼层
虽然不明白再说什么,但似乎很厉害的样子……
回复

使用道具 举报

梦石
0
星屑
287
在线时间
1580 小时
注册时间
2010-6-17
回帖
2818

开拓者贵宾

发表于 2012-10-6 19:09:00 | 显示全部楼层
什么意思 没看懂~~
快来点我一下,你会豁然开朗的
喵Kano特制
←开发中……

←暂时弃坑 电脑上资源全没
回复

使用道具 举报

哆啦菌

梦石
0
星屑
46
在线时间
795 小时
注册时间
2010-7-24
回帖
3507
发表于 2012-10-6 23:21:31 | 显示全部楼层
那么实际用途呢?
随便看看
回复

使用道具 举报

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
回帖
2982

贵宾

发表于 2012-10-7 10:42:22 | 显示全部楼层
C++的循环写法囧
数组循环完全可以用
  1. Array.each {|value| do_something}
复制代码
这样的囧
回复

使用道具 举报

梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-10-1
回帖
29
 楼主| 发表于 2012-10-7 12:43:56 | 显示全部楼层
之前我也想这样用,但总会出脚本错误。。。。所以索性就用c的写法了,那个实际用途嘛,我还没去想,可能可以用在那种不断按确定键,可以重复产生事件吧。比如泡泡堂不停的放泡泡那种。我现在还在熟悉这个工具啊,囧
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
回帖
1577

开拓者

发表于 2012-10-8 15:38:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-10-1
回帖
29
 楼主| 发表于 2012-10-8 15:54:46 | 显示全部楼层
其实这段代码有点问题,就是在第一个红框中。
直接写成这种在删除的时候也有些元素会出现一个循环的延迟
i=0;
while(i<@usr_events.size())
usr_events[i].update();
i+=1;
end


‘‘──qbjxiaolei于2012-10-8 15:55补充以下内容:

但是在加入不是很大量的数据的时候还是看不出来的
’’
回复

使用道具 举报

梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-10-1
回帖
29
 楼主| 发表于 2012-10-9 09:48:43 | 显示全部楼层
晴兰 发表于 2012-10-8 15:38
C++最常见的scope在Ruby没那么明显,我特别指的是RAII,虽然一个资源可以构造时就取得,但析构在哪里都是个 ...

ruby当中的资源不是自动释放的吗,解释器里面分配的每个资源实体可能都有一个引用计数吧,析构的时候就在引用计数为0的时候估计。
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部