2013-05-24 3 views
5

タッチイベントを取得したいスターリングSpriteがあります。 A使用していますスターリングスプライト内の空きスペースのタッチイベント

content.addEventListener(TouchEvent.TOUCH, onTouch); 

function onTouch(e:TouchEvent) { 

    var touch:Touch = e.getTouch(content) as Touch; 
    if (touch) { 
     //do something 
    } 
} 

ただし、これはSpriteの子がタッチされていて、それらの間のスペースではない場合にのみ機能します。アルファ画像を作成してその下にスティックすると、タッチイベントを受け取るべきだと思っていますが、より良い方法がありますか?

また、私はステージ上のタッチを聞いて、hitTestPoint()と同等のことをすることを考えていました。

私は

var hitTest = (touch && content.hitTest(this.globalToLocal(new Point(touch.globalX, touch.globalY)))); 

を思い付いた。しかし、これは、コンテンツスプライトの子をタッチすると、タッチイベントのみが働いている、どちらか動作するようには思えません。

ソリューション:最後に

Cherniv

bg = new Quad(width, height); 
bg.alpha = 0; 
addChildAt(bg, 0); 
+0

「isTouching()」を試しましたか?http://doc.starling-framework.org/core/starling/events/Touch.html#isTouching()? – Cherniv

答えて

3

によって示唆されているように私はalpha'dクワッドを使用し、あなたのSpriteで軽量の透明QuadImageは不要)を使用しないようにしてください。

+0

私はこれと最後に行きました。誰もより良い解決策を投稿しなければ、私はあなたの答えを受け入れます。歓声 – Tom

+0

@Tomこの「タッチ」の振る舞いには何らかの論理がありますが、あなたが指摘したようにオプションの振る舞いを持たないことは悲しいことです。私は 'isTouching'を試しました - それはここで助けていません – Cherniv

+0

これは、Starlingの作成者であるDaniel SperlがStarlingフォーラムの人々にお勧めするアプローチです。ネイティブディスプレイリストでは、多くの人が使用する通常のアプローチは 'graphics.drawRect()'で、目に見えない塗りつぶしがあるので、Starlingのアプローチはほぼ同じです。 Starlingには1つの選択肢があります:サブクラスで 'hitTest()'をオーバーライドし、独自のカスタム動作を提供します。 – joshtynjala

0

私はあなたに役立つことを願っています。

content.addEventListener(TouchEvent.TOUCH, onTouch); 

    function onTouch(e:TouchEvent) { 

     var touch:Touch = e.getTouch(stage) as Touch; 
     if(touch && touch.phase == TouchPhase.BEGAN){ 
      //do something 
     } 
    } 

    or 
    addEventListener(TouchEvent.TOUCH, onTouch); 

    function onTouch(e:TouchEvent) { 
     var touch:Touch = e.getTouch(sprite(eve.target)) as Touch; 
     if(touch && touch.phase == TouchPhase.BEGAN){ 
      //do something 
     } 
    } 
関連する問題