始点と終点が同じである場合、マウスは点の周りに完全な円を描いています。この定義に正確に従うと、ゲームで問題が発生する可能性があります。これは、プレイヤーがサークル完了イベントをスローするためにサークルを完了する必要がないためです。
ただし、マウスが開始する位置、特定の方向に出る位置、特定の方向に入る位置のマウス座標でヒット テストを行うと、このような問題を回避できます。
これはほとんど意味のない言葉の寄せ集めだったので、以下に明るい色の図を示します。
2つのことをふりましょう。まず、青い点が外接したい点であること。2 つ目は、クリックした後にのみサークル テストを実行することです。
青い点の周りの特定のポイントをクリックすると、ヒット テスト エリアが表示されます。それは 3 つの個別のテスト可能領域で構成されており、それらをleft_exit
(下の緑の要素としてright_exit
表示される)、(上の緑の要素として表示される)、およびcenter
(赤の要素として表示される) と呼びましょう。
マウスの下にヒット テスト領域が表示さcenter
れ、ステージの端から青い点まで伸びます。
マウスが にある間はcenter
、何も起こりません。
ただし、マウスが中心から外れた場合、次の 3 つの可能性があります。
マウスは円を描くように移動できず、緑色の領域にもヒットしませんでした
この場合、マウスが円を描くのに失敗したことがわかり、ヒット テストをキャンセルできます。
マウスが上の緑色の要素に移動しましたright_exit
。
この場合、マウスが特定の方向に移動していることがわかります。その方向を保存するために、ブール値 (おそらく と呼ばれるhit_right
) を true に設定できます。
マウスが下の緑色の要素に移動しましたleft_exit
。
hit_left
この場合、マウスが特定の方向に移動していることもわかっており、ブール値 (おそらく と呼ばれる) を trueに設定することでその方向を保存できます。
ケース 2 と 3 には、次の 2 つのオプションがあります。
マウスが赤い要素に戻りますcenter
。
その場合、それらは特定の方向に移動していないため、特定のブール値を false に設定できます。
マウスは要素から出て、反対側の緑色の要素に移動します。
この場合、円はほぼ完成します。もう 1 つのブール値を true に設定できます。
ケース 2 の後、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;
}
これが役立つことを願っています!