2013-05-24 25 views
5

Ich habe ein Starling Sprite, die ich Touch-Events für erhalten möchte. Eine Uhr mitTouch-Events für leeren Raum in einem Star Sprite

content.addEventListener(TouchEvent.TOUCH, onTouch); 

function onTouch(e:TouchEvent) { 

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

Dies ist jedoch nur funktioniert, wenn die Kinder des Sprite berührt werden und nicht auf den Raum dazwischen. Ich denke, wenn ich ein Alpha'd-Bild erzeuge und darunter klebst, sollte es die Berührungsereignisse aufgreifen, aber gibt es einen besseren Weg?

Ich dachte auch darüber nach, auf die Bühne zu hören und das Äquivalent einer hitTestPoint() zu tun.

kam ich mit

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

up Aber dies scheint nicht, das Berührungsereignis nur dann, wenn Sprite ein Kind des Inhalts arbeitet arbeiten berührt wird.

Lösung:

Am Ende habe ich eine alpha'd verwendet Quad wie Cherniv vorgeschlagen

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

Versuchen Sie 'isTouching()': http://doc.starling-framework.org/core/starling/events/Touch.html#isTouching()? – Cherniv

Antwort

3

Try leichte transparente Quad (keine Notwendigkeit für eine Image) in Ihrem Sprite zu verwenden.

+0

Ich ging damit am Ende. Wenn niemand eine bessere Lösung postet, werde ich Ihre Antwort akzeptieren. Prost – Tom

+0

@Tom es gibt eine Art von Logik in diesem 'touch'-Verhalten, aber es ist traurig, dass es kein optionales Verhalten hat, wie Sie bemerkt haben. Ich habe das 'isTouching' probiert - es hilft hier nicht – Cherniv

+0

Dies ist der Ansatz, den Daniel Sperl, der Schöpfer von Starling, normalerweise Leuten in den Starling-Foren empfiehlt. In der nativen Anzeigeliste ist der übliche Ansatz, den viele Leute verwenden, "graphics.drawRect()" mit einer unsichtbaren Füllung, also ist der Starling-Ansatz ungefähr derselbe. Es gibt eine Alternative in Starling: überschreiben Sie 'hitTest()' in einer Unterklasse und bieten Sie Ihr eigenes benutzerdefiniertes Verhalten. – joshtynjala

0

ich hoffe, es wäre hilfreich für Sie.

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 
     } 
    }