1

ボタンを押したときにボタンのヒットボックスが大きくなるようにしようとしているので、ユーザーがマウスを既に押したボタンの端からスライドさせた場合、それがなくなる前にさらに移動する必要がありますクリックのカウントが長くなります。

これはタッチ スクリーン デバイスで使用されます。ユーザーはクリックしようとしますが、離す前に指をスライドさせるため、クリック イベントは終了しません。

私は標準のフラッシュ ボタン (flash.display.SimpleButton) を使用しているので、理想的にはそれらで動作するものが必要です。解決策として hitTestState を見続けていますが、何も試していません。

ボタンのサイズが 50、50 であるとします。

ユーザーが mouse_down イベントをトリガーすると、100 x 100 になり、ヒットボックス (実際のボタンではなく、ヒットのみ) として中央に配置されます。その後、クリックまたはリリースすると、50 にフェードバックします。 50サイズ。

何か案は?

ありがとうジョン

4

2 に答える 2

2

ボタンをムービー クリップに置き換えます。方法はいくらでもありますが、ここでは機能する 1 つの構造を示します。

アップフレームとオーバーフレームのヒットエリアが小さい:

アップフレーム

ダウンフレームの面積を大きくすると、次のようになります。

ダウンフレーム

(もちろん、ヒット エリアのアルファを 0 にしますが、何が起こっているかを確認できるように色を付けました。)

次に必要なのは、非常に簡単なコードです。MyButton というステージ上のインスタンスがあるとします。

import flash.display.MovieClip;
import flash.events.MouseEvent;

var MyButton:MovieClip;
MyButton.buttonMode = MyButton.useHandCursor = true;

function handleMouseOver($e:MouseEvent):void
{
    MyButton.gotoAndStop("Over");
}

function handleMouseDown($e:MouseEvent):void
{
    MyButton.gotoAndStop("Down");
}

function handleMouseUp($e:MouseEvent):void
{
    MyButton.gotoAndStop("Up");
}

MyButton.addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver);
MyButton.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
MyButton.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);

これを数回再利用したい場合は、MovieClips が拡張できるクラスに簡単にリファクタリングできます。

お役に立てれば。

于 2012-08-14T07:49:20.513 に答える
1

まあ、ヒットボックスを捨ててhitTestPoint.

したがって、これを追加するだけです:

var hitObject:Sprite = new Sprite();
//Create a new Sprite
hitObject.graphics.beginFill(0);
hitObject.graphics.drawRect(0,0,50,50);
hitObject.endFill();
//Draw a rectangle on the sprite, this is your hitbox

hitObject.alpha = 0;
//Make it invisible
hitObject.x = button.x;
hitObject.y = button.y;

addChild(hitObject);

addEventListener(MouseEvent.MOUSE_DOWN, mDownEvent);
addEventListener(Event.ENTER_FRAME, enterFrameEvent);

function mDownEvent(e:MouseEvent){
     hitObject.scaleX = hitObject.scaleY = 2;
     //When the mouse is down the object gets 2 times as big (100 pixels)

     if(hitObject.hitTestPoint(mouseX,mouseY, true)){
         //You have clicked your hitbox
     }
}

function enterFrameEvent(e:Event){
     if(hitObject.scaleX > 1){
           hitObject.scaleX -= 0.1;
           hitObject.scaleY -= 0.1;
           //Decrease the hitbox his size when you have pressed the mouse, 0.1 is the speed the hitbox gets smaller
     }
}
于 2012-08-13T12:03:11.813 に答える