2013-05-07 16 views
2

我有一个容器有多个滚动图像,我添加了TouchEvent.TOUCH作为事件监听器而不是MouseEvent.CLICK,因为starling不支持MouseEvent。 问题是当我在图像之间导航时,它会听取TouchEvent,而我不需要这个?有没有解决方案而不是TouchEvenet将MouseEvent.CLICK添加到starling图像

代码:

private function onComplete (event:flash.events.Event):void 
    { 
     bitmapData = Bitmap(LoaderInfo(event.target).content).bitmapData; 
     var newImage:Image = Image.fromBitmap(Bitmap(LoaderInfo(event.target).content)); 
     newImage.height = 154; 
     newImage.width = 180; 
     addChild(newImage); 
     newImage.addEventListener(starling.events.TouchEvent.TOUCH,image_clickHandler); 
    } 
    private function image_clickHandler(event:starling.events.TouchEvent):void 
    { 
     var touch:Touch = event.getTouch(stage); 
     if (touch != null) 
     { 
      if (touch.phase == TouchPhase.BEGAN) 
      { 
       //some code 
      } 
     } 

    } 
+0

'TouchEvent'不是代替MouseEvent'的'!同样的'TouchEvent'也像普通的'MouseEvent'一样在浏览器中工作。 – Cherniv 2013-05-07 09:16:56

+0

我搜索并找到了[问题](http://forum.starling-framework.org/topic/mouse-events),因为我写的TouchEvent不是MouseEvent – 2013-05-07 09:22:35

+0

好吧,它是“同一个班级”。你用“舞台”来试试这个解决方案吗? – Cherniv 2013-05-07 09:25:23

回答

4

这是一个很好的做法不给事件侦听器附加到对象场景。您应该只附加一个听众的阶段,然后读取触摸事件的target属性。
这里从 “Inroducing八哥” 一书的例子:

private function onClick(e:TouchEvent):void 
{ 
var touches:Vector.<Touch> = e.getTouches(this); 
var clicked:DisplayObject = e.currentTarget as DisplayObject; 
if (touches.length == 1) 
{ 
    var touch:Touch = touches[0]; 
    if (touch.phase == TouchPhase.ENDED) 
    { 
    trace (e.currentTarget, e.target); 
    } 
} 
} 

这里,currentTargetStage,并target将是你的形象

+0

已完成工作。谢谢,如果我不需要使用TouchEvent,是否有Starling.events.Event.TRIGGERED或MouseEvent.CLICKED事件? – 2013-05-07 09:27:55

+0

@ SameerH.Ibra,http://wiki.starling-framework.org/manual/event_handling – Cherniv 2013-05-07 10:16:03

+0

@ SameerH.Ibra总是欢迎,我建议你使用“介绍Starling”书作为用户手册 – Cherniv 2013-05-07 10:33:41