2013-05-24 38 views
5

Tôi có một Starling Sprite mà tôi muốn nhận các sự kiện liên lạc. A đang sử dụngChạm vào các sự kiện cho không gian trống bên trong một ngôi sao đầy sao

content.addEventListener(TouchEvent.TOUCH, onTouch); 

function onTouch(e:TouchEvent) { 

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

Tuy nhiên, điều này chỉ hoạt động khi con của Sprite được chạm và không nằm trên khoảng trống giữa chúng. Tôi nghĩ rằng nếu tôi tạo ra một hình ảnh alpha'd và thanh bên dưới nó sau đó sẽ nhận các sự kiện liên lạc, nhưng là có một cách tốt hơn?

Tôi cũng đang suy nghĩ về việc lắng nghe cảm ứng trên sân khấu và thực hiện tương đương với hitTestPoint().

tôi đến với

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

Nhưng điều này dường như không làm việc, hoặc, sự kiện liên lạc chỉ làm việc khi một đứa trẻ trong những nội dung Sprite được chạm vào.

Giải pháp:

Cuối cùng tôi đã sử dụng một alpha'd Quad theo đề nghị của Cherniv

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

Bạn đã thử 'isTouching()': http://doc.starling-framework.org/core/starling/events/Touch.html#isTouching()? – Cherniv

Trả lời

3

Cố gắng sử dụng nhẹ trong suốt Quad (không cần cho một Image) trong Sprite của bạn.

+0

Tôi đã đi với điều này cuối cùng. Nếu không ai đăng một giải pháp tốt hơn, tôi sẽ chấp nhận câu trả lời của bạn. Chúc mừng – Tom

+0

@Tom có ​​một số loại logic trong hành vi 'touch'' này, nhưng nó buồn rằng nó không có hành vi tùy chọn như bạn đã lưu ý. Tôi đã cố gắng 'isTouching' - nó không giúp đỡ ở đây – Cherniv

+0

Đây là cách tiếp cận mà Daniel Sperl, người sáng tạo của Starling, thường đề nghị cho những người trong các diễn đàn Starling. Trên danh sách hiển thị tự nhiên, cách tiếp cận thông thường mà nhiều người sử dụng là 'graphics.drawRect()' với một fill vô hình, vì vậy cách tiếp cận Starling gần như giống nhau. Có một thay thế trong Starling: ghi đè 'hitTest()' trong một lớp con và cung cấp hành vi tùy chỉnh của riêng bạn. – joshtynjala

0

tôi hy vọng nó sẽ hữu ích cho bạn.

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