那么接下来就是核心代码的编写了。我们暂时先空出可变值D(可变值3)和E(可变值4),由于至少同时需要记录15帧下可变值A的信息,因此我们
至少需要15个可变值来记录信息。而且
出于内存考虑可变值应该避免无限向后使用,我这里就
暂时取35个(35是我随便定的数字,其实出于节约空间的目的以及其他考量16个甚至15个就已经足够,不过适当放宽不是问题)可变值。因为可变值A~E也就是可变值0~4我们事先保留了,所以
我们取可变值5~39。
接下来我怎么做呢?每帧都要记录被跟踪物的可变值A,而且要被记录在不同的可变值内。因此
我们使用跟踪物的可变值D来统计需要把这一帧的记录值分配到哪个可变值里。因为我们用了35个可变值,因此每35帧这个值就会被覆盖,但是因为这个值只需要保留15帧,
因此在35帧后覆盖是安全的。可变值D我们希望它能够在5~39之间循环,而下面这种写法就可以考虑:
这个mod是取余数。因为D在5~39之间,所以D-5就应该在0~34之间,将(D-6)每帧加1并且求除以35的余数的话,一旦(D-5)加1之后大于等于35,那么就会被重置回0,这样就做到了(D-5)在0~34间循环,而再加上5,也就是D在5~39之间循环了。
如果觉得太难不会,也可以用条件判断的方法,其实是一样的。
然后呢,我们就可以用可变值D来分配每一帧记录的被跟踪物的信息了,像这样:
(使用Use expression来做到可变的可变值序号的效果)看起来比较套娃,但是这就是动态分配可变值的精髓(?)。注意一下因为事件是从上至下执行的,所以记录被跟踪物应当在可变值D递增之前。
这样,记录的部分我们就完成了,事实上在计算机科学中,有一个专门的术语用来形容这个步骤,那就是
“enqueue”(入列)——因为这看起来就像一堆数值排排队等待被读取,非常形象。
接下来就是读取的问题了。