Ada selusin cara saya bisa menjawab pertanyaan ini, tetapi untuk menjaga pikiran saya sejalan, saya mengutarakannya sesuai dengan masalah saya.
Jadi saya membuat platform mengambang yang saya ingin dapat melakukan perjalanan dari satu titik yang ditunjuk ke yang lain, dan kemudian kembali ke yang pertama, dan hanya melewati antara keduanya dalam garis lurus. Namun, hanya untuk membuatnya sedikit lebih menarik, saya ingin menambahkan beberapa aturan ke platform.
- Saya mengkodekannya untuk melakukan perjalanan kelipatan nilai ubin seluruh data dunia. Jadi jika platform tidak stasioner, maka ia akan melakukan perjalanan setidaknya satu lebar ubin penuh atau tinggi ubin.
- Dalam satu panjang ubin, saya ingin mempercepat dari berhenti ke kecepatan maksimal yang diberikan.
- Setelah mencapai jarak satu ubin panjang, saya ingin memperlambat berhenti di koordinat ubin yang diberikan dan kemudian ulangi proses secara terbalik.
Dua bagian pertama tidak terlalu sulit, pada dasarnya saya mengalami masalah dengan bagian ketiga. Saya ingin platform berhenti tepat pada koordinat ubin, tetapi karena saya bekerja dengan akselerasi, sepertinya mudah untuk mulai menerapkan akselerasi dalam arah yang berlawanan dengan nilai yang menyimpan kecepatan platform saat ini setelah mencapai panjang satu ubin. jarak (dengan asumsi bahwa genteng bepergian lebih dari satu panjang genteng, tetapi untuk menjaga hal-hal sederhana, mari kita asumsikan itu) - tetapi kemudian pertanyaannya adalah apa nilai yang benar untuk akselerasi ke peningkatan untuk menghasilkan efek ini? Bagaimana saya menemukan nilai itu?
acceleration = desired_velocity - currentVelocity
Kemudian terapkan akselerasi itu seperti biasanya. Saya akan membuat jawaban sedikit lebih jauh menunjukkan apa yang saya lakukan.Jawaban:
Menggunakan perilaku kemudi ini sebagai panduan. Melihat perilaku tiba:
Kita dapat membuat fungsi "tiba di" seperti sesuatu yang mirip dengan ini:
Ini akan memperbarui akselerasi yang perlu kita gunakan untuk menerapkan pada objek yang bergerak.
sumber
Lihatlah halaman ini: http://sol.gfxile.net/interpolation/index.html
Tampaknya Anda menginginkan efek seperti smoothstep:
Jika Anda memiliki titik paling kiri, titik paling kanan yang harus dicapai platform, dan waktu yang digunakan untuk membuat urutan penuh, sesuatu seperti ini mungkin ok:
bingkai foreach:
jika Anda menggunakan mesin fisika, Anda dapat membuatnya dengan impuls, seharusnya tidak terlalu sulit untuk diterjemahkan. Jika Anda menginginkan proses yang lebih mulus, Anda dapat meningkatkan level smoothstep.
sumber
Anda dapat menggunakan XnaTweener yang menyediakan fungsi pelonggaran yang menginterpolasi nilai dari satu titik ke titik lainnya dengan cara yang mudah ...
Berikut ini adalah balasan dengan beberapa kode yang berbasis di proyek Xna Tweener dan video yang menunjukkan kinerjanya ...
https://gamedev.stackexchange.com/a/26872/8390
[EDIT]
Anda harus memiliki urutan tombol yang menentukan pergerakan platform, seperti ini:
Dan kemudian Anda bisa menangani gerakan dengan cara ini:
"DefaultPosition" adalah posisi awal, "Traslation" mengakumulasi pergerakan beberapa kunci, dan setiap traslation kunci relatif terhadap kunci sebelumnya, jadi ketika Anda melipatgandakannya dengan faktor rasio [0..1] ia mengembalikan traslasi relatif yang diinterpolasi berjalan untuk mencapai kunci itu dari kunci sebelumnya ...
Di sini Anda memiliki video lain yang menunjukkan gerakan platform didefinisikan seperti dijelaskan di sini ...
http://www.youtube.com/watch?v=ZPHjpB-ErnM&feature=player_detailpage#t=104s
Saya telah mengulangi kode ini mencoba membuatnya mudah dimengerti ... mungkin ia memiliki beberapa bug ... kode asli menangani beberapa contoh dari gerakan yang sama tetapi dengan beberapa penundaan di antara setiap contoh ... Saya yakin kode ini dapat didesain ulang agar lebih mudah ...
sumber