Masalah lag-vs-responsif ini adalah situasi dengan hampir semua pengontrol gerakan, apakah sesuatu seperti Hydra, Wii Remote, Kinect, atau PlayStation Move.
Masalahnya adalah ini:
Saat aliran input masuk, Anda membuat keputusan berdasarkan kerangka demi kerangka tentang apakah akan mempercayai data input atau tidak; apakah tren yang Anda lihat sekarang akan terus berlanjut dalam data yang Anda terima selusin milidetik dari sekarang. Misalnya, jika ada perubahan tiba-tiba ke kanan frame ini, Anda tidak tahu apakah itu benar-benar data input (dan karenanya Anda harus menindaklanjutinya) atau apakah itu hanya jitter (dan karenanya Anda harus mengabaikannya). Apa pun yang Anda pilih, jika nanti Anda menemukan bahwa Anda salah, Anda mengizinkan jitter input untuk memasukkannya ke dalam gim Anda (dalam kasus pertama), atau memperkenalkan lag ke dalam gim Anda (dalam kasus terakhir).
Tidak ada solusi yang baik untuk ini. Solusi "benar" untuk menentukan apakah input itu nyata atau jitter perlu mengetahui apa yang akan dilakukan aliran input di masa depan, serta apa yang dilakukan di masa lalu. Kami tidak bisa melakukan itu di game, karena alasan yang jelas. Jadi tidak, tidak ada cara untuk menyaring data rotasi untuk menghapus jitter tanpa kehilangan presisi, dalam konteks permainan yang bekerja dengan memasukkan data secara real-time.
Saya telah melihat pabrikan besar merekomendasikan bahwa pengembang menangani masalah ini dengan meminta pemain menahan tombol sambil memutar kontrol, sehingga gim dapat mematikan kode anti-jitter pada saat itu, sehingga tidak tertinggal. (Saya tidak merekomendasikan ini, tapi ini satu pendekatan).
Saya telah melihat beberapa pustaka middleware input gerak yang menangani masalah ini dengan memperkenalkan penundaan buatan pada input - ada buffer seperempat detik yang memasukkan data input, dan game Anda hanya mendengar tentang input tersebut seperempat detik kemudian, sehingga perpustakaan dapat memuluskan kegelisahan untuk Anda, dengan mengetahui apa yang terjadi sebelum dan sesudah "hadiah" dari sudut pandang permainan. Itu bekerja dengan baik, selain dari memperkenalkan seperempat detik keterlambatan untuk semuanya. Tapi itu salah satu cara untuk menyelesaikan masalah, dan itu bisa melakukan pekerjaan yang luar biasa untuk secara akurat mewakili gerakan dengan jitter dihapus, dengan mengorbankan kelambatan konstan.
Tetapi tanpa terlalu ekstrem, masih ada beberapa hal yang dapat kita lakukan untuk memberikan perilaku yang jauh lebih baik, meskipun kita tahu bahwa akan selalu ada "skenario terburuk" yang berperilaku dengan cara yang tidak ideal.
Wawasan inti adalah bahwa kita hanya benar-benar peduli tentang jitter ketika controller sebagian besar diam, dan kita hanya benar-benar peduli tentang lag ketika controller sedang dipindahkan. Jadi strategi kita harus mencoba untuk menangani hal-hal sehingga kita memiliki kelambatan ketika controller diam, dan memiliki jitter ketika controller bergerak.
Berikut adalah dua cara yang mungkin untuk melakukan itu:
Salah satu pendekatan umum adalah sistem "terkunci / tidak terkunci", di mana Anda melacak orientasi perangkat, dan jika itu tidak berubah untuk sementara waktu (setengah detik atau lebih), Anda 'mengunci' orientasi itu, tidak mengambil tindakan berdasarkan orientasi yang dilaporkan perangkat hingga cukup berbeda untuk 'membuka kembali'. Ini benar-benar dapat memadamkan jitter berbasis orientasi, tanpa memperkenalkan jeda ketika orientasi secara aktif berubah. Mungkin ada sedikit lag sebelum kode memutuskan perlu beralih ke mode "tidak terkunci", tetapi akan jauh lebih baik daripada memiliki lag di mana-mana.
Pendekatan lain adalah rata-rata bersama-sama memasukkan data dari bingkai. Poin penting di sini adalah hanya rata-rata bersama data input dari frame di mana data input samar-samar serupa - Ini berarti bahwa kegelisahan kecil akan menjadi kabur dan melunak, tetapi perubahan yang lebih besar tidak menjadi kabur, karena data mereka tidak cukup mirip dengan data dari frame sebelumnya.
Ada cara lain untuk mendapatkan efek serupa juga. Wawasan inti adalah bahwa Anda tidak dapat memiliki non-jitter dan non-lag dalam game real-time Anda secara bersamaan, karena untuk melakukan itu akan membutuhkan pengetahuan tentang masa depan. Jadi, Anda perlu memilih kapan harus membiasakan perilaku kontrol Anda ke arah menerima jitter dan kapan untuk bias itu terhadap menerima lag, untuk membuat pengalaman keseluruhan seburuk mungkin.