หากต้องการจัดการเหตุการณ์การป้อนข้อมูลด้วยการสัมผัส ให้อ่านอาร์เรย์
motionEvents
ใน Game Loop ของคุณ เหล่านี้
มีเหตุการณ์ที่เกิดขึ้นตั้งแต่ครั้งสุดท้ายที่ล้างอาร์เรย์เหล่านี้
จำนวนเหตุการณ์ที่จัดเก็บไว้ใน motionEventsCount
ทำซ้ำและจัดการแต่ละเหตุการณ์ใน Game Loop ในตัวอย่างนี้ โค้ดต่อไปนี้จะทำซ้ำ
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); }
เมื่อคุณทำเสร็จแล้ว อย่าลืมล้างคิวของกิจกรรมที่คุณเพิ่ง ที่จัดการ:
android_app_clear_motion_events(mApp);