Saat ini saya sedang mencari pengembangan game XNA dengan bahasa C #.
Saya memiliki dua kelas: pengendali permainan utama dan kelas "sprite". Berikut ini adalah beberapa pseudo-code dasar yang saya harap cukup menjelaskan masalah ini.
Game.cs
class game {
sprite the_sprite;
void update(time) {
var mouse = mouse.state
if(mouse.clicked) { this.the_sprite.moveTo(mouse.x, mouse.y) }
this.the_sprite.update(time)
base.update(time)
}
}
Sprite.cs
class sprite {
vector2 location;
vector2 move_to;
void moveTo(x, y) { this.move_to = new vector2(x, y) }
void update(time) {
if(this.location.x > this.move_to.x /* (or less than) */) {
// adjust location.x
}
if(this.location.y > this.move_to.y /* (or greater than) */) {
// adjust location.y
}
}
}
Pada dasarnya: ketika pengguna mengklik suatu tempat di jendela game, koordinat x dan y mouse diambil, dan objek game akan bergerak menuju lokasi itu selama periode waktu tertentu.
Yah ... kodenya berfungsi, tapi jelek, dan objek tidak bergerak langsung ke arah objek (sebaliknya, itu gerakan diagonal, diikuti oleh gerakan sumbu tunggal). Saya menduga ada beberapa fungsi matematika yang bisa saya gunakan, tapi jujur saya tidak tahu harus mulai dari mana. Ada saran?
Jawaban:
Jika saya memahami masalah Anda dengan benar, Anda seharusnya hanya memiliki Vector2 yang mewakili arah yang ingin Anda pindahkan ke dalam kelas sprite Anda. Seperti ini:
Ini adalah vektor yang dinormalisasi (yang artinya memiliki panjang 1) yang menunjukkan ke mana Anda ingin pergi.
Lalu, tambahkan properti Speed float, yang mengatakan seberapa cepat sprite seharusnya bekerja.
Anda juga perlu menambahkan fungsi UpdateSprite, jadi mengapa tidak memasukkannya ke dalam kelas Sprite Anda?
Ini akan memperbarui posisi sprite untuk membuatnya bergerak (Anda mengalikannya dengan delta detik sehingga sprite bergerak dengan benar di komputer yang lambat juga).
Akhirnya, Anda cukup menetapkan properti arah Anda seperti ini:
sumber
Google normalisasi ... saya juga sedikit tersesat dalam hal ini, tetapi saya cukup yakin ini akan membantu menyelesaikan masalah Anda. Orang lain dapat menguraikan atau menyangkal jawaban saya, saya yakin
Sunting: Saya bisa menjawab ini dengan lebih baik, permintaan maaf
Saya pribadi selalu melihat ke posting blog ini untuk membantu dengan jenis masalah ini: http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
Itu dimulai dari awal dan relevan untuk pengembangan game.
sumber