如果鼠标在同一个地方开始并结束,则鼠标在该点周围形成一个完整的圆。如果我们严格遵循这个定义,它会在游戏中造成一些问题,因为玩家不需要完成圈子来抛出任何圈子完成事件。
但是如果你做一个命中测试用鼠标所在的坐标鼠标开始,它退出某个方向,当它在一定方向进入,你将能够避免这样的问题。
由于这是一个混乱的话,几乎没有任何意义,我下面有一个鲜艳的颜色图。
让我们假装两件事。首先,蓝点是我们想要限定的点。其次,我们只想在点击后进行我们的圈子测试。
当我们点击我们周围的蓝点的某一点,会出现一个命中测试区域。它是由三个独立的可测试领域,我们姑且称之为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;
}
我希望这有助于!
谢谢,我参加了一个裂缝它,并有以下它的一些麻烦。我认为我有主要想法,就像在影片剪辑中提到的那样,并确保鼠标按照正确的顺序进行测试。 虽然,我正在寻找一个可能的简单解决方案。我在逻辑上仍然存在一些缺陷,但至少在正面方向上工作正常。我也摆脱了一个动态的“起点”,以简化它。 – 2013-05-14 20:48:56
我不能为我的生活弄清楚如何发布代码,但这里是未知的: '\t if(rotateAngle> lastAngle)lastAngle = rotateAngle; \t否则如果(rotateAngle 350 && rotateAngle> = 0){ \t \t \t迹( “PossibleCircle&重置” +计数); \t \t \t lastAngle = 0; \t \t} \t} \t否则{ \t \t迹( “elsed”); \t} ' 它可以在正方向上移动,但如果向后移动,它可能会使鼠标移动。 角度rotateAngle是相对于其盘旋的点和鼠标。我真的只是想看看鼠标是否在所有点上移动。 –
2013-05-14 21:03:52
如果我不能以这种方式工作,我会再看看你的方式,谢谢你的完整例子。 – 2013-05-14 21:05:23