Saya membuat sprite pada koordinat piksel yang tepat untuk menghindari efek kabur yang disebabkan oleh antialiasing (sprite adalah pixel-art dan akan terlihat mengerikan jika difilter). Namun, karena pergerakan objek melibatkan kecepatan variabel, gravitasi, dan interaksi fisik, lintasan dihitung dengan presisi subpixel.
Pada kecepatan screenspace yang cukup besar (lebih besar dari 2 atau 3 piksel) ini bekerja dengan sangat baik. Namun, ketika kecepatan kecil, efek tangga yang nyata dapat muncul, terutama di sepanjang garis diagonal. Ini bukan masalah lagi pada kecepatan screenspace yang sangat lambat (v << 1 pixel per detik) jadi saya hanya mencari solusi untuk nilai kecepatan menengah.
Di sebelah kiri adalah lintasan diplot untuk kecepatan besar, diperoleh dengan pembulatan koordinat objek yang sederhana. Di tengah Anda dapat melihat apa yang terjadi ketika kecepatan menjadi lebih kecil, dan efek tangga yang saya bicarakan. Di sebelah kanan, lokus lintasan yang ingin saya dapatkan.
Saya tertarik pada gagasan algoritme untuk memfilter lintasan untuk meminimalkan aliasing, sambil mempertahankan perilaku asli pada kecepatan besar dan kecil. Saya memiliki akses ke ,t, posisi dan kecepatan instan, serta jumlah nilai sebelumnya yang berubah-ubah, tetapi karena ini adalah simulasi waktu nyata, saya tidak tahu tentang nilai-nilai masa depan (meskipun jika perlu, estimasi dapat diekstrapolasi dengan asumsi tertentu) . Perhatikan bahwa karena simulasi fisika, perubahan arah mendadak juga dapat terjadi.
sumber
velocity.y / velocity.x
dengan faktor koreksi yang sebanding dengan kecepatannya.Tidak banyak yang dapat Anda lakukan untuk dunia berbasis fisika umum. Jika semua objek Anda bergerak di sepanjang garis atau lingkaran tertentu, Anda bisa melakukan sesuatu. Tetapi Anda beroperasi di bawah fisika aktual. Objeknya adalah tempat fisika meletakkannya; Anda hanya menggambar perkiraan berbasis pixel dari lokasi itu.
Biasanya ini adalah sesuatu yang harus Anda terima jika Anda ingin tetap menggunakan koordinat piksel. Seharusnya tidak terlalu terlihat kecuali Anda menampilkan pada resolusi yang sangat kecil (kurang dari 640x480, meskipun itu tergantung pada resolusi dan ukuran asli layar).
sumber
Saat gerakan tertunda tegak lurus dengan gerakan terakhir (dalam ruang layar), abaikan saja dan gunakan koordinat layar terakhir. Jika itu menyebabkan gagap yang seburuk tangga, Anda dapat mencoba memindahkan jumlah dari gerakan yang tertunda dan terakhir.
Saya pikir masalahnya terletak pada v <sqrt (2). v> sqrt (2) harus selalu bergerak setidaknya diagonal penuh, menghindari efek tangga. Mungkin berguna untuk pemangkasan yang membutuhkan perbandingan gerakan sebelumnya.
sumber