问题
我正在做一个锻炼记忆力的游戏,用户在点击了一个精灵后,必须在两秒以内点击另一个与它匹配的精灵。我用全局变量来记录匹配的变量,但我不确定如何来做时间记录这部分工作。我已经尝试过使用”the shorttime”,但我找不到一个好的方法将所得的时间相减。
回答
用时钟来功能作为运算时间的基础,在dirctor里是非常复杂的部分-----尽管我不是很清楚为什么必须这样。(the time始终是作为字符串输出的,而字符串对我并没有太大的意义。)无论如何,我们并不需要担心,因为我们不使用the short time。我们确实不需要知道具体的时间是多少。我们更愿意了解一个事件和另一个事件的间隔的时间。这就是说,我们更需要一个秒表,而不是一个钟。幸运的是用timer的命令很容易做到这一点。
Timer是一种自由的计时工具。它以”ticks”------也就是60分之1秒计时。你唯一需要掌握的命令就是”starttimer”,这会使timer复位到0。只要开始计时,你可以在任何时候检查数值以便得知过去的时间。
让我们来写一个行为,以接受这个小小的挑战。首先,我们来对这个行为来定一下位。当你将这个行为附加到精灵上的时候,你会希望能够输入一个名称,这样对应的精灵也用同一个名称。你也会希望能够定义两次点击的延迟时间(用ticks----60ticks等于一秒)。这将是你可以将这行为重复使用到任意一组精灵上。第二步,在运行的时候,当精灵被点击,以下是需要做的事情。
1. 判断第一次和第二次点击的是不是一组。
2. 如果是第一次点击,那么便需要在全局变量中储存这一组的名字并且开始计时。
3. 如果是第二次点击,那么便需要核实是否与上次点击储存在全局变量中的名称一致。
4. 如果名称相符,那么便需要检测是否超时。
5. 在第二次点击后并且检测后,需要将全局变量复位到0。
以下是这个行为。
----timermatch behavior
----copyright © 1998,zzp online,llc(它已经5岁了)
property pgroup
propert ptimelapse
global gclickgrop
on getpropertydescriptionlist
set d=[:]
addprop d,#pgrop,[#default:#first,#format:#symbol,#comment:”匹配的组”]
addprop d,#ptimelapse,[#default:120t,#format:#integerl,#comment:”间隔时间”]
return d
end
on mousedown me
if gclickgrop=#null then
set gclickgroup=pgroup
starttimer
else
if gclickgroup=pgrop then
if the timer<120 then
alert “这是一组”
else
alert “太慢”
end if
else
alert “不是一组”
end if
set gclickgroup=#null
end if
end