Project1

标题: 【VA】 新人 测试动态事件 [打印本页]

作者: qbjxiaolei    时间: 2012-10-6 17:53
标题: 【VA】 新人 测试动态事件
在朋友推荐下,国庆节玩了玩rmva。不会ruby。拿了两天来看ruby脚本,跟c++差不多,继承性上有差别。拿了两天来看内置的脚本(还没看完),摸清了大概的流程。大概是对的吧。这把看到的东西跟大家分享哈。

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

为了不与源代码冲突,我在Game_Map中添加了一个usr_events变量,初始化为空数组。在Game_Map的update中也不断执行usr_events中各成员的update。


不晓得图片能看到不。。

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


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


这个有个问题是谁来调用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。


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




作者: qbjxiaolei    时间: 2012-10-6 18:06
回复字数要好多啊。。。
作者: hanxill    时间: 2012-10-6 18:40
虽然不明白再说什么,但似乎很厉害的样子……
作者: 月华风    时间: 2012-10-6 19:09
什么意思 没看懂~~
作者: fxwd    时间: 2012-10-6 23:21
那么实际用途呢?
作者: feizhaodan    时间: 2012-10-7 10:42
C++的循环写法囧
数组循环完全可以用
  1. Array.each {|value| do_something}
复制代码
这样的囧
作者: qbjxiaolei    时间: 2012-10-7 12:43
之前我也想这样用,但总会出脚本错误。。。。所以索性就用c的写法了,那个实际用途嘛,我还没去想,可能可以用在那种不断按确定键,可以重复产生事件吧。比如泡泡堂不停的放泡泡那种。我现在还在熟悉这个工具啊,囧
作者: 晴兰    时间: 2012-10-8 15:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: qbjxiaolei    时间: 2012-10-8 15:54
其实这段代码有点问题,就是在第一个红框中。
直接写成这种在删除的时候也有些元素会出现一个循环的延迟
i=0;
while(i<@usr_events.size())
usr_events[i].update();
i+=1;
end


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

但是在加入不是很大量的数据的时候还是看不出来的
’’
作者: qbjxiaolei    时间: 2012-10-9 09:48
晴兰 发表于 2012-10-8 15:38
C++最常见的scope在Ruby没那么明显,我特别指的是RAII,虽然一个资源可以构造时就取得,但析构在哪里都是个 ...

ruby当中的资源不是自动释放的吗,解释器里面分配的每个资源实体可能都有一个引用计数吧,析构的时候就在引用计数为0的时候估计。
作者: 晴兰    时间: 2012-10-9 11:23
提示: 作者被禁止或删除 内容自动屏蔽




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