2012-01-02 4 views
1

Я разрабатываю игру для Android с помощью Adobe AIR 3.0, также использую Samsung Galaxy S2 для тестирования своей игры и неплохо работает с приличными 30 кадрами в секунду.Multi touch и Adobe AIR для мобильных телефонов

для управления игрой, я использую виртуальный джойстик и некоторые кнопки на экране (например, бросать оружие, прыгать и т. Д.).

однако кажется, что мультитач не работает нормально, если я нажимаю одну кнопку и в то же время, если я нажимаю другую кнопку. первый перестает работать.

здесь фрагмент кода, который определяет поведение мультитач -

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

для кнопки прыжка, виртуальный джойстик и т.д. - я использую TouchEvent.TOUCH_BEGIN событие. , пожалуйста, дайте мне знать, что не так с событием касания.

ответ

0

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

спасибо за точку, мультитач работает нормально для меня (и мое тестовое устройство samsung galaxy s2 тоже) .- вот более подробная информация о том, как мультитач перестает работать - когда я нажимаю свой джойстик, а затем прыгаю, мой джойстик все еще отлично работает, но в случае, если я нажимаю кнопку перехода, а затем пытаюсь перемещаться с помощью джойстика, джойстик не получает мультитач или события touch_begin. –

1

В общем случае для каждого события касания назначается touchPointID, и этот touchPointID будет согласован через собственные TOUCH_BEGIN, TOUCH_MOVE и TOUCH_END. Если вы прекратите отмену события касания на основе неправильной точки касания, результаты могут никогда не произойти. См. Adobe tuts dealing with touchPointID.

Однако вам нужно будет опубликовать свой код, чтобы узнать, что на самом деле происходит.

+0

до сих пор этот вопрос не решен, это что-то вроде - мы не можем добавить более одного eventListeners для TOUCH_BEGINE, TOUCH_MOVE, TOUCH_END и т.д., я использую 3 EventListener, когда-то для моего джойстика, 2-й для кнопки перехода, а третий для кнопки перехода. Я не уверен в первопричине этой ошибки мультитач. любой ввод s сильно оценен. спасибо. –

+0

@TryTryAgain ok, позвольте мне сломаться и выяснить - мой другой элемент управления (т.е.), кнопка паузы и кнопка перехода имеют прослушиватель событий TOUCH_TAP (так как мне нужно запускать эти события точно так, как работает щелчок мыши) в то время как моя кнопка виртуального джойстика имеет TOUCH_BEGIN и TOUCH_END обработчики событий. я подозреваю, что TOUCH_TAP нарушает мультитач, –

+0

Вам нужно будет опубликовать код для проверки. , , У меня недостаточно опыта, чтобы понять решение с головы. – iND

Смежные вопросы