Saat ini saya memiliki sesuatu seperti:
float deltaX = point0.getX() - point1.getX();
float deltaY = point0.getY() - point1.getY();
Dan setiap 0,01 detik saya menyegarkan posisi objek saya seperti ini:
object.setPosition(object.getX()-deltaX/100,object.getY()-deltaY/100);
Jadi ini memindahkan objek saya dari point0 ke point1 dalam 1 detik. Yang saya butuhkan adalah memiliki 2 poin, untuk dapat memindahkan objek dari point0, menghadap (ke arah) point1 dengan kecepatan konstan. Jadi, ketika saya memiliki titik yang lebih dekat ke titik awal saya, objek akan bergerak ke arahnya dengan kecepatan yang sama jika saya memiliki titik yang lebih jauh. Ada saran yang dihargai. Terima kasih.
game-mechanics
movement
Fofole
sumber
sumber
Jawaban:
Saya akan menggunakan beberapa struktur aljabar linier karena lebih mudah menggambarkan operasi seperti itu. Jika Anda tidak tahu bagaimana menerapkan operasi vektor ini, saya akan memberikan penjelasan singkat di bagian akhir.
Jadi katakanlah Anda mulai dengan nilai-nilai ini:
start
danend
tandai titik akhir gerakan,speed
adalah berapa banyak piksel yang harusnya bergerak dengan detik, danelapsed
adalah tingkat di mana Anda akan memperbarui posisi objek Anda (beberapa mesin sudah memberikan nilai itu untuk Anda ):Hal pertama yang ingin Anda hitung adalah jarak antara kedua titik, dan vektor yang dinormalisasi yang berisi arah dari awal hingga akhir. Juga, Anda harus "mematahkan" posisi objek ke
start
titik. Langkah ini dilakukan hanya sekali, pada awalnya:Kemudian pada metode pembaruan Anda, Anda memindahkan objek dengan menambahkan perkalian
direction
,speed
danelapsed
ke posisinya. Setelah itu, untuk memeriksa apakah gerakan sudah berakhir, Anda melihat apakah jarak antara titik awal dan posisi objek saat ini lebih besar dari jarak awal yang Anda hitung. Jika itu benar, kami pasang posisi objek ke titik akhir, dan berhenti memindahkan objek:Referensi Operasi Vektor Cepat
Perwakilan
Jumlah / Kurangi
Kalikan dengan Scalar (float)
Panjang / Jarak
Normalisasi
Itu seharusnya cukup untuk mengubah kode di atas menjadi operasi reguler jika Anda tidak memiliki
Vector
kelas yang tersedia untuk Anda.Contoh Konversi
sumber
Vector2 start;
menjadifloat startX, startY;
. Dan Anda dapat dengan mudah menghitung jarak secara manual, seperti yang saya jelaskan di bagian akhir. Yaitufloat dX = bX - aX; float dY = bY - aY; float distance = Math.sqrt(dx*dx+dy*dy);
.Buat Vektor dan normalkan kembali. Peringatan, beberapa kode semu dengan nomor yang salah di depan:
Ini akan memberi Anda Vector seperti:
Sekarang normalkan vektornya, dan Anda akan menerima ini :
Dari sini gerakannya sama dengan delta Anda.
sumber
Disalin dan ditempel dari jawaban saya ke: Dapatkan poin pada garis antara dua poin
Dalam Pseudocode:
sumber