Sebelum menerapkan ekstrapolasi pada gerakan sprite saya, tabrakan saya bekerja dengan sempurna. Namun, setelah menerapkan ekstrapolasi pada gerakan sprite saya (untuk menghaluskan semuanya), tabrakan tidak lagi berfungsi.
Ini adalah cara kerja sebelum ekstrapolasi:
Namun, setelah saya menerapkan ekstrapolasi, rutin tabrakan rusak. Saya berasumsi ini karena bertindak berdasarkan koordinat baru yang telah dihasilkan oleh rutin ekstrapolasi (yang terletak di panggilan render saya).
Setelah saya menerapkan ekstrapolasi saya
Bagaimana cara memperbaiki perilaku ini?
Saya telah mencoba melakukan pemeriksaan tabrakan ekstra setelah ekstrapolasi - ini tampaknya untuk menjernihkan banyak masalah, tetapi saya telah mengesampingkan hal ini karena menempatkan logika ke dalam rendering saya adalah keluar dari pertanyaan.
Saya juga telah mencoba membuat salinan dari posisi sprite X, memperkirakan itu dan menggambar menggunakan itu daripada yang asli, sehingga meninggalkan keaslian logika untuk melanjutkan - ini tampaknya pilihan yang lebih baik, tetapi masih menghasilkan beberapa efek aneh saat bertabrakan dengan dinding. Saya cukup yakin ini juga bukan cara yang tepat untuk menangani ini.
Saya telah menemukan beberapa pertanyaan serupa di sini tetapi jawabannya belum membantu saya.
Ini adalah kode ekstrapolasi saya:
public void onDrawFrame(GL10 gl) {
//Set/Re-set loop back to 0 to start counting again
loops=0;
while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){
SceneManager.getInstance().getCurrentScene().updateLogic();
nextGameTick+=skipTicks;
timeCorrection += (1000d/ticksPerSecond) % 1;
nextGameTick+=timeCorrection;
timeCorrection %=1;
loops++;
tics++;
}
extrapolation = (float)(System.currentTimeMillis() + skipTicks - nextGameTick) / (float)skipTicks;
render(extrapolation);
}
Menerapkan ekstrapolasi
render(float extrapolation){
//This example shows extrapolation for X axis only. Y position (spriteScreenY is assumed to be valid)
extrapolatedPosX = spriteGridX+(SpriteXVelocity*dt)*extrapolation;
spriteScreenPosX = extrapolationPosX * screenWidth;
drawSprite(spriteScreenX, spriteScreenY);
}
Edit
Seperti yang saya sebutkan di atas, saya telah mencoba membuat salinan koordinat sprite khusus untuk menggambar .... ini memiliki masalah sendiri.
Pertama, terlepas dari penyalinannya, ketika sprite bergerak, itu sangat halus, ketika berhenti, bergetar sedikit ke kiri / kanan - karena masih memperkirakan posisi itu berdasarkan waktu. Apakah ini perilaku normal dan dapatkah kita 'mematikannya' ketika sprite berhenti?
Saya sudah mencoba bendera untuk kiri / kanan dan hanya memperkirakan jika salah satu dari ini diaktifkan. Saya juga telah mencoba menyalin posisi terakhir dan saat ini untuk melihat apakah ada perbedaan. Namun, sejauh tabrakan berlangsung, ini tidak membantu.
Jika pengguna menekan katakan, tombol kanan dan sprite bergerak ke kanan, ketika menyentuh dinding, jika pengguna terus menekan tombol kanan ke bawah, sprite akan terus menjiwai ke kanan, sementara dihentikan oleh dinding ( Oleh karena itu tidak benar-benar bergerak), namun karena bendera kanan masih diatur dan juga karena rutin tabrakan terus-menerus memindahkan sprite keluar dari dinding, itu masih tampak pada kode (bukan pemain) bahwa sprite masih bergerak, dan oleh karena itu ekstrapolasi terus berlanjut. Jadi apa yang akan dilihat pemain, adalah sprite 'statis' (ya, itu menjiwai, tapi itu tidak benar-benar bergerak melintasi layar), dan kadang-kadang bergetar hebat ketika ekstrapolasi berusaha melakukan itu ..... .. Semoga bantuan ini