Добавить поддержку сенсорного управления

Чтобы обрабатывать события сенсорного ввода, прочитайте массив motionEvents в игровом цикле. Они содержат события, произошедшие с момента последней очистки этих массивов. Количество содержащихся событий хранится в motionEventsCount .

  1. Повторяйте и обрабатывайте каждое событие в игровом цикле. В этом примере следующий код выполняет итерацию motionEvents и обрабатывает их через handle_event :

    for(size_t i = 0; i < mApp->motionEventsCount; ++i) {
     
    GameActivityMotionEvent* motionEvent = mApp->motionEvents[i];

     
    int action = motionEvent->action;
     
    int actionMasked = action & AMOTION_EVENT_ACTION_MASK;
     
    int ptrIndex = (action & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK) >>
        AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT
    ;

     
    struct CookedEvent ev;
      memset
    (&ev, 0, sizeof(ev));

     
    if (actionMasked == AMOTION_EVENT_ACTION_DOWN ||
        actionMasked
    == AMOTION_EVENT_ACTION_POINTER_DOWN) {
          ev
    .type = COOKED_EVENT_TYPE_POINTER_DOWN;
     
    } else if (actionMasked == AMOTION_EVENT_ACTION_UP ||
        actionMasked
    == AMOTION_EVENT_ACTION_POINTER_UP) {
          ev
    .type = COOKED_EVENT_TYPE_POINTER_UP;
     
    } else {
          ev
    .type = COOKED_EVENT_TYPE_POINTER_MOVE;
     
    }

      ev
    .motionPointerId = motionEvent->pointers[ptrIndex].id;
      ev
    .motionIsOnScreen = motionEvent->source == AINPUT_SOURCE_TOUCHSCREEN;
      ev
    .motionX = GameActivityPointerInfo_getX(
       
    &motionEvent->pointers[ptrIndex]);
      ev
    .motionY = GameActivityPointerInfo_getY(
       
    &motionEvent->pointers[ptrIndex]);

     
    if (ev.motionIsOnScreen) {
       
    // Use screen size as the motion range.
        ev
    .motionMinX = 0.0f;
        ev
    .motionMaxX = SceneManager::GetInstance()->GetScreenWidth();
        ev
    .motionMinY = 0.0f;
        ev
    .motionMaxY = SceneManager::GetInstance()->GetScreenHeight();
     
    }

      handle_event
    (&ev);
    }
  2. Когда вы закончите, не забудьте очистить очередь событий, которые вы только что обработали:

    android_app_clear_motion_events(mApp);