Dokunmatik giriş etkinliklerini işlemek için oyun döngünüzdeki diziyi motionEvents
okuyun. Bunlar, bu diziler en son temizlendikten sonra gerçekleşen etkinlikleri içerir.
İçerilen etkinliklerin sayısı motionEventsCount
olarak depolanır.
Oyun döngünüzdeki her etkinliği yineleyin ve yönetin. Bu örnekte aşağıdaki kod,
motionEvents
işlemini tekrarlar vehandle_event
aracılığıyla işler: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); }
Bitirdiğinizde, az önce ele aldığınız etkinliklerin sırasını temizlemeyi unutmayın:
android_app_clear_motion_events(mApp);