پشتیبانی لمسی را اضافه کنید

برای مدیریت رویدادهای ورودی لمسی، آرایه 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);