如果鼠标在同一个地方开始和结束,则鼠标绕着一个点转了一圈。如果我们完全遵循这个定义,它可能会在游戏中引起一些问题,因为这样玩家就不需要完成圆圈来抛出任何圆圈完成事件。
但是,如果您使用鼠标开始的鼠标坐标进行命中测试,鼠标在某个方向退出,以及在某个方向进入时,您将能够避免此类问题。
因为那是一堆毫无意义的词,所以我在下面为你准备了一张色彩鲜艳的图表。
让我们假设两件事。首先,蓝点是我们希望限定的点。其次,我们只想在点击后进行循环测试。
当我们点击蓝点周围的某个点时,会出现一个命中测试区域。它由三个单独的可测试区域组成,我们称它们left_exit
为(作为下部绿色元素right_exit
可见)、(作为上部绿色元素可见)和center
(作为红色元素可见)。
命中测试区域出现center
在鼠标下方,从舞台边缘一直延伸到蓝点。
当鼠标停留在 中center
时,什么也没有发生。
但是,当鼠标移出中心时,可能会出现三种情况:
鼠标未能以圆形方式移动并且没有击中任何绿色区域
在这种情况下,我们知道鼠标没有绕圈,我们可以取消命中测试。
鼠标移到上方的绿色元素上right_exit
。
在这种情况下,我们知道鼠标现在正在向特定方向移动,为了保存该方向,我们可以将布尔值(可能称为hit_right
)设置为 true。
鼠标移到下方的绿色元素left_exit
上。
在这种情况下,我们还知道鼠标正在向特定方向移动,我们可以通过将布尔值(可能称为hit_left
)设置为 true 来保存该方向。
在情况 2 和 3 中,有两种可能的选择:
鼠标返回到红色元素center
。
在这种情况下,它们不再向特定方向移动,因此我们可以将某些布尔值设置为 false。
鼠标退出元素并转到对面的绿色元素。
在这种情况下,一个圆圈几乎是完整的。我们可以将另一个布尔值设置为 true。
在案例 2 之后,有两种可能的选择:
鼠标将这个绿色元素留在错误的方向。
意味着一个圈子还没有完成。
鼠标进入红色元素center
。
意味着我们已经完成了一个循环。
//Import mouse events
import flash.events.MouseEvent;
//on mouse event MOUSE_DOWN throw function check_for_circle
stage.addEventListener(MouseEvent.MOUSE_DOWN, check_for_circle);
var hit_right = false;
var hit_left = false;
function check_for_circle(event:MouseEvent){
//draw invisible hit-test
//make sure that center forms a line from the
//point, through the mouse, and to the edge of the stage
}
right_exit.addEventListener(MouseEvent.MOUSE_OVER, check_right);
left_exit.addEventListener(MouseEvent.MOUSE_OVER, check_left);
center.addEventListener(MouseEvent.MOUSE_OVER, check_center);
//add MOUSE_OUT checks as well
//and if you are scared that people will try to cheat,
//add a MOUSE_LEAVE function to the stage
function check_right(event:MouseEvent){
hit_right = true;
}
function check_left(event:MouseEvent){
hit_left = true;
}
function check_center(event:MouseEvent){
if(hit_left && hit_right){
//yay it worked!
}
else{
hit_left = false;
hit_right = false;
}
我希望这有帮助!