- 注册时间
- 2004-6-23
- 最后登录
- 2006-1-19
⑤进阶
风语者
- 积分
- 528
|
如果以下有什么不明的地方,请参照
http://bbs.rpgchina.com/dispbbs.asp?boardID=5&ID=2339&page=2
方法有如下几种:
1. 利用数据的存储方法来实现"多个脚印事件到时消失变量"的压缩
在rm中,每个变量均可以存放一个7位的10进制数,最大为9999999
转换为其他进制数后的结果是:
2进制:100110001001011001111111
3进制:200211001102100
4进制:212021121333
5进制:10024444444
6进制:554200143
7进制:150666342
8进制:46113177
9进制:20731370
10进制:9999999
由于想要存放同类的数据,所以每位的最大值应该相等
因此实际可用长度为当前长度-1,因此长度为:
2进制(23位):11111111111111111111111
3进制(14位):22222222222222
4进制(11位):33333333333
5进制(10位):4444444444
6进制(8位):55555555
7进制(8位):66666666
8进制(7位):7777777
9进制(7位):8888888
10进制(7位):9999999
由于2进制的0、1特性,所以很适合做成开关,但rm自带5000个开关,个人感觉没必要
而3、4进制最大可存数为2、3,作为脚印的存在时间来说太短了,
而6、7、8、9、10进制所能存储的位数太少,虽然时间充裕多了。
所以综合来看,5进制用来存放时间还是比较不错的。
要想运用5进制存放时间,有以下两种方法
1, 把5进制10位数不同变化转变为10进制9位数并用条件来分开判断,并实现结果
但由于10位最高数为4的5进制数的各位不同变化转化为10进制就有1048576种
不同的数,就算是其他进制,也几乎是不可能的……
所以,要想运用此种方法,就不能将位数全部用上,但也突出不了压缩的效果了
2, 用rm自带的运算法则来取出自己想用的数,rm有加、减、乘、除、余5种运算法则
先判断当前5进制数是否大于10、100、1000、10000....来判断该数的位数
再用除法除去自己想除的10的倍数,再取10的倍数的余数(倍数因需要而定)
就能得到响应的位的数,再对该数进行加减。
但不幸的是,rm没有直接取直接用的功能,它必须对一个变量除以或取余一个数然
后存入第1个变量中,如果你需要该5进制的10个位的数就必须要有10个变量
这样反而比直接用变量来存时间常数要用到的变量还多……结果当然是NO!
由于前面的方法都不实用,故又想到一新方法,但……
2. 因为定期并列处理是个循环,所以每当判断前次移动的坐标与今次移动的坐标不同
便给一个新变量+1(以下称该变量为变量A)
因为它的无限循环,所以如果长时间不移动主角,变量A的值就会越来越大,
判断该值的大小,根据实际情况来设定
当该值大于一个常数时,逻辑理解为主角没有持续走动,停了下来
所以再下次移动的时候在原主角停留地处留下一个"主角曾经停留过的标记"
这个标记就是一个区别于其他一直行走的脚印图的事件图(特征为:有一个双脚直立效果)
当该值小于一个常数时,逻辑理解为主角持续走动.按正常处理.
而脚印的消失,是由于第1个脚印消失后,其余脚印才开始逐个消失
所以,只要判断哪个脚印是第1次移动过的脚印即可实现消失功能.
而什么是第1次移动呢?便是由站立不动的状态开始向行动状态转变的那一次移动.
而最后一次行动,就是指变量A的值再次大于一个常数时,最后调用过的脚印事件
所以,当变量A内值大于一常数时,便是"脚印事件到时消失变量"的倒记时开始,当该
变量倒记时为0时,呼叫当前事件第2页:变更事件图为消失图,然后调用(当前事件号+1)
的事件的第2页,然后该事件又调用下一个事件,直到该事件是最后一次调用的事件.
由此便能实现脚印的消失,但有一个很大的隐患(未经证实)
便是,我不确定定期并列处理重复执行的速率是多少.
按理来说应该和cpu挂钩,也就是cpu越快,执行速度就越快.那么事件A累加的频率就越快
所以有可能出现,一直出现行动状态脚印图片的脚印移动系统
或一直出现停留状态脚印图片的脚印移动系统.
需要新的建议!如有赐教者!不胜感激!
希望rmxp有改善……
[此贴子已经被作者于2004-7-28 23:10:37编辑过] |
|