在scratch中,有“角色被点击”和“按下鼠标”两个模块,可以实现鼠标的单击。scratch在这两个模块里封装了鼠标单击事件的实现。但是关于鼠标双击,就有学员提到过一些问题。今天就先从这些问题开始。
首先,可能大家都能想到的,就是利用计时器来控制和实现双击事件。
没错,就是这个思路!且看如下代码,我们要求双击画五角星,而单击不能画。这段代码能不能正确执行?
我们设计的初衷是,通过计时器小于0.2来判断双击,如果大于这个时间段,就认为是两个单击。但实际结果却是:不行!不满足题意,单击也可以画。
问题出在哪里?任何一个成功的程序或软件,都少不了优秀而健壮的调试。通过调试,我们发现了:鼠标计数=2永远会执行,计时器小于0.2永远会执行。
我们还发现鼠标计数如果不清零,会是一个很大的数,而计时器似乎永远是0。这太奇怪了。
其实懂得了原理,就不奇怪了。
首先先说计时器,计时器从归零到执行判断小于0.2,虽然中间还间隔了一些代码,但是计算机是高速运转的机器,代码执行是瞬间的。Scratch计时器的精度相对有限,所以几乎判别不出来计时器的变化。所以计时器仍然是0。
再说鼠标计数。鼠标计数是在按下鼠标后执行加1,但是这个按下鼠标可不只是按的那一下。当按下鼠标的时候,这段代码会循环的执行,直到松开。
了解了原理,我们做了如下修正,就会得到正确的执行。正确代码如下:
我们把计时器归零放在了判断第一次鼠标点击里面,这样呢计时器就能识别出两次鼠标点击的时间间隔;增加了等待按下鼠标不成立的模块,这个代码的含义就是,每当按下鼠标执行至此,就要等待鼠标松开,而不再去重复执行。
程序虽短,但遇到问题一定要知其然知其所以然。
朋友们可以试试,有其他问题也可以留言。