Saya membuat game di mana musuh-musuh muncul secara acak di peta lalu bergerak ke arah setiap frame pemain dengan kecepatan acak. Peta tidak memiliki hambatan sehingga musuh harus selalu bergerak dalam garis lurus. Saya menulis fungsi gerakan beberapa kali tetapi tidak peduli apa musuh selalu mengenai 0, 45, 90, 135, 180, 225, 270, 315 sudut tetapi tidak pernah garis lurus. Berikut ini contoh kode:
base_speed = random();
diff_x = abs(enemy_y_pos - player_x_pos);
diff_y = abs(enemy_x_pos - player_y_pos);
if (diff_x > diff_y) {
y_speed = base_speed;
} else if (diff_y > diff_x) {
x_speed = base_speed;
}
if (enemy_x_pos < player_x_pos) {
velocity.x = x_speed;
} else if (enemy_x_pos > player_x_pos) {
velocity.x = -x_speed;
} else {
velocity.x = 0;
}
if (enemy_y_pos < player_y_pos) {
velocity.y = y_speed;
} else if (enemy_y_pos > player_y_pos) {
velocity.y = -y_speed;
} else {
velocity.y = 0;
}
enemy_x_pos = enemy_x_pos + velocity.x;
enemy_y_pos = enemy_y_pos + velocity.y;
Ini adalah upaya pertama saya di pemrograman game. Saya kira itu harus menggunakan algoritma seperti Bresenham's Line ( http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm ) tetapi upaya saya untuk mengimplementasikan memiliki masalah yang sama. Bagaimana cara membuat musuh bergerak dalam garis lurus?