多点触控和Adobe AIR移动版

问题描述:

我正在开发一款使用Adobe AIR 3.0的Android游戏,同时我也使用三星Galaxy S2来测试我的游戏,并且运行得非常好,体面30 fps。多点触控和Adobe AIR移动版

控制游戏,我使用虚拟游戏杆和屏幕上的一些按钮(例如扔武器,跳等)。

但是,似乎多点触控工作不正常,如果我按下一个按钮,并在同一时间,如果我下另一个按钮。第一个停止工作。

这里是代码片段定义了多点触控的行为 -

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 
NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE; 

为跳跃键,虚拟摇杆等 - 我使用TouchEvent.TOUCH_BEGIN事件。 请让我知道触摸事件有什么问题。

http://flex.org/tour-de-mobile-flex/值得一试。这对我有帮助。

从MultiTouch.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark"> 

    <fx:Script> 
    import mx.core.UIComponent; 
    import spark.components.Label; 

    private var circles:Object = new Object(); 
    </fx:Script> 

    <fx:Declarations> 
    <fx:Component className="Circle"> 
     <s:Ellipse width="140" height="140"> 
     <s:fill> 
      <s:SolidColor color="#ff0000"/> 
     </s:fill> 
     </s:Ellipse> 
    </fx:Component> 
    </fx:Declarations> 

    <s:creationComplete> 
     Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 

     if (Multitouch.supportsTouchEvents) 
     { 
     l.text = "maxTouchPoints = " + Multitouch.maxTouchPoints; 

     addEventListener(TouchEvent.TOUCH_BEGIN, function(event:TouchEvent):void { 
      var c:Circle = new Circle(); 
      c.x = event.localX - 70; 
      c.y = event.localY - 70; 
      addElement(c); 
      circles[event.touchPointID] = c; 
     }); 
     addEventListener(TouchEvent.TOUCH_MOVE, function(event:TouchEvent):void { 
      if (circles[event.touchPointID] != null) 
      { 
      circles[event.touchPointID].x = event.localX - 70; 
      circles[event.touchPointID].y = event.localY - 70; 
      } 
     }); 
     addEventListener(TouchEvent.TOUCH_END, function(event:TouchEvent):void { 
      if (circles[event.touchPointID] != null) 
      { 
      removeElement(circles[event.touchPointID]); 
      delete circles[event.touchPointID]; 
      } 
     }); 
     addEventListener(TouchEvent.TOUCH_OUT, function(event:TouchEvent):void { 
      if (circles[event.touchPointID] != null) 
      { 
      removeElement(circles[event.touchPointID]); 
      delete circles[event.touchPointID]; 
      } 
     }); 
     } 
     else 
     { 
     l.text = "MultiTouch is not supported on this device"; 
     } 
    </s:creationComplete> 

    <s:Label id="l" paddingTop="10"/> 

</s:Group> 
+0

感谢点,多点触控是为我工作的罚款(和我的测试设备三星Galaxy S2太).- 这里是如何multitouchs一个更详细的停止工作 - 当我按下我的操纵杆,然后跳转按钮,我操纵杆仍能正常工作,但如果按下跳转按钮,然后尝试通过操纵杆移动,游戏杆不会收到多点触控或touch_begin事件。 – 2012-01-02 05:52:16

通常,touchPointID分配给每个触摸事件,并且此touchPointID将通过它自己的TOUCH_BEGIN,TOUCH_MOVE和TOUCH_END保持一致。如果您最终根据错误的触摸点取消触摸事件,结果可能永远不会发生。请参阅Adobe tuts dealing with touchPointID

但是,您必须发布代码以了解真正发生的情况。

+0

还是这个问题不解决,是不是有点像 - 我们不能TOUCH_BEGINE,TOUCH_MOVE TOUCH_END等添加多个事件监听器,我使用3把事件监听,它曾经是我的操纵杆,第二跳按钮,第三跳按钮。 我不确定此多点触控失败的根本原因。 任何输入非常感谢。 谢谢。 – 2012-01-03 02:57:23

+0

@TryTryAgain好吧,让我分手,并找出 - 我的其他控制(即)跳转按钮,暂停按钮和跳转按钮有TOUCH_TAP事件监听器(因为我需要以鼠标点击的方式完全触发这些事件),而我的虚拟手柄按钮有TOUCH_BEGIN和TOUCH_END事件处理程序。我怀疑TOUCH_TAP是否打破了多点触控, – 2012-01-03 03:24:51

+0

您将不得不张贴代码进行测试。 。 。我没有足够的经验去了解我头顶上的解决方案。 – iND 2012-01-03 03:50:36