2016-07-07 5 views
0

オブジェクトがMovieClipで、私のフラッシュタイムラインにButtonというボタンがあります。`tap`イベントが実行されたとき` false`にオブジェクトの `visible`を` true`に設定します。

ボタンをタップしたときに、object.visibleをtrueに設定すると、ボタンがタップされていないときにfalseに戻したいと考えています。

どうすればいいですか?

私はこのコードを試しましたが、私が望むように動作しません。私はオブジェクトを表示することができますが、それを隠すことはできません。

button1.addEventListener(TouchEvent.TOUCH_TAP, touchTap); 

function touchTap(e:TouchEvent): void { 
    mcObj.visible = true; 
    stage.addEventListener(TouchEvent.TOUCH_END, touchEnd); 
} 

function touchEnd(e:TouchEvent): void { 
    mcObj.visible = false; 
    stage.removeEventListener(TouchEvent.TOUCH_END, touchEnd); 
} 
+0

'stage.addEventListener(TouchEvent.TOUCH_END、touchEnd);を' button1.addEventListener(TouchEvent.TOUCH_END、touchEnd);に変更するとどうなりますか? –

+0

同じ結果が表示されます – Gregorio

+0

TOUCH_BEGINではなくTOUCH_TAPを使用しますか? 'button1.addEventListener(TouchEvent.TOUCH_BEGIN、touchTap); ' –

答えて

1

このコードは機能すると思います。

button1.addEventListener(TouchEvent.TOUCH_BEGIN, touchTap); 

function touchTap(e:TouchEvent): void { 
    mcObj.visible = true; 
    button1.addEventListener(TouchEvent.TOUCH_END, touchEnd); 
} 

function touchEnd(e:TouchEvent): void { 
    mcObj.visible = false; 
    button1.removeEventListener(TouchEvent.TOUCH_END, touchEnd); 
} 

私は
1を変更:TouchEvent.TOUCH_BEGIN
2からTouchEvent.TOUCH_TAPstage.addEventListenerbutton1.addEventListener

+0

私はそれが動作することを知っています。しかし、私が以前にも望んでいたように。もし私が 'TOUCH_BEGIN'と' TOUCH_END'イベントを使用すると、私は長い時間ボタンに触れることができ、私のタッチを解放するまでオブジェクトの可視は真のままです。私はタップが必要です。 – Gregorio

+0

@ G.Chiko、それはあなたが望んでいないものですか? ** "_ボタンがタップされているときに、object.visibleをtrueに設定したい場合、ボタンがタップされていないときにfalseに戻したいと思います。単語「タップ」を使用しますが、問題は「タッチ」のように記述されます。 1秒間(タップ持続時間)または放す(タッチ持続時間)まで、またはトグル(タップごとにオン/オフ)するまで何かを見たいですか? –

+0

持続時間のようなものになりますが、touch_beginとは違っている間にタップを使用します - touch_end – Gregorio

0

にあなたの問題については何も言って前に、のはTouchEvent.TOUCH_BEGINTouchEvent.TOUCH_ENDTouchEvent.TOUCH_TAPイベントの定義について見てみましょう:

...

タッチ対応デバイス ..との接触。

  • TouchEvent.TOUCH_TAPがある:ユーザは接触がタッチ対応デバイスで開始された同じInteractiveObjectインスタンス上の接触点を持ち上げたときに送出

。 ..

そしていくつかのテストでは、TouchEvent.TOUCH_ENDイベントがinほとんどの場合、解雇の前にTouchEvent.TOUCH_TAP 1つ(1または2ミリ秒)ので、ユーザーが既にデバイスとの接触を解除したかどうかを検出することができます(TouchEvent.TOUCH_ENDが解雇された)次に接触が開始された同じInteractiveObjectオブジェクト(TouchEvent.TOUCH_TAPが発砲される)。

これがあなたのコードが機能していない理由です。


さあ、あなたの問題を見てみましょう:あなたは、ムービークリップを表示したいユーザーがボタンをタップすると、彼はそのボタンだけで、非常に短い時間(タップの時間〜=を離したときにそれを隠すだけのとき300ミリ秒)。

この場合、ユーザーがボタンを放していなくても、そのオブジェクトを非表示にするには、タイムアウトを伴うTouchEvent.TOUCH_BEGINイベントリスナーを使用することをお勧めします。そのために

、この例を取る:助けることができる

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 

btn.addEventListener(TouchEvent.TOUCH_BEGIN, on_touchBegin); 
function on_touchBegin(e:TouchEvent): void 
{ 
    obj.visible = true; 
    hide_obj(); 
} 

function hide_obj(): void 
{ 
    // you can use a Timer object instead of setTimeout() 
    var timeout:int = setTimeout(function(){ 
     clearTimeout(timeout); 
     obj.visible = false; 
    }, 300);  
} 

希望を。

関連する問題