Tôi đang tạo một trò chơi trong đó kẻ thù sinh ra ngẫu nhiên trên bản đồ, sau đó di chuyển về phía người chơi mọi khung hình với tốc độ ngẫu nhiên. Bản đồ không có chướng ngại vật nên kẻ thù phải luôn di chuyển theo đường thẳng. Tôi đã viết chức năng di chuyển một vài lần nhưng không có vấn đề gì khi kẻ thù luôn đánh 0, 45, 90, 135, 180, 225, 270, 315 góc nhưng không bao giờ là một đường thẳng. Đây là một ví dụ về mã:
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;
Đây là nỗ lực đầu tiên của tôi tại lập trình trò chơi. Tôi đoán nó nên sử dụng thuật toán như Dòng của Bresenham ( http://en.wikipedia.org/wiki/Bresenham%27s_line_alacticm ) nhưng những nỗ lực của tôi để thực hiện có cùng một vấn đề. Làm thế nào để tôi làm cho kẻ thù di chuyển trên một đường thẳng?