Мультитач и Adobe AIR для мобильных устройств - PullRequest
1 голос
/ 02 января 2012

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 02 января 2012

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

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

0 голосов
/ 02 января 2012

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