Tôi có thể xác định hai vấn đề. Cái đầu tiên liên quan đến chuyển động mượt mà và cái thứ hai liên quan đến nhân vật tắt màn hình.
Để tạo chuyển động trơn tru, bạn có thể sử dụng một kỹ thuật gọi là Nội suy tuyến tính hoặc (LERP) để chuyển động trơn tru. Về cơ bản cách thức hoạt động của nó là giữa điểm bắt đầu và điểm kết thúc của bạn, bạn tính toán một tập hợp các khoảng cách nhỏ để mô phỏng chuyển động trơn tru và chậm lại khi điểm cuối gần đạt được.
Ví dụ đơn giản nhất của chức năng này sẽ là:
//point1 is the current position, will be starting position on first call
//point2 is the target position
//epsilon is the % of the distance between current and target you want
//to cover per game physics loop (a fixed realworld time based loop).
//The smaller the % the "smoother" the motion.
float lerp(float point1, float point2, float epsilon)
{
return point1 + epsilon * (point2 - point1);
}
Khi nhân vật di chuyển đến gần điểm 2, nó sẽ dần dần chậm lại. Lưu ý mặc dù họ sẽ không bao giờ thực sự chạm vào điểm 2 nhưng lại vô cùng gần gũi. Bạn sẽ cần phải sửa lỗi này và nếu người chơi nhỏ hơn một khoảng cách vô cùng nhỏ so với điểm 2, chúng ta có thể xem xét người chơi đang ở điểm 2.
Vấn đề thứ hai bạn đề cập có liên quan đến nhân vật của bạn bay ngoài màn hình. Đây là kết quả của đầu vào được đọc mỗi lần làm mới vòng lặp trò chơi kết hợp với chuyển động tức thời giữa các ô.
Lý tưởng nhất để giải quyết điều này, trong mã của bạn, bạn cần phải quyết định
- Mất bao nhiêu thời gian trong thế giới thực để nhân vật di chuyển từ điểm 1 đến điểm 2.
- Đặt Lerp của bạn để chạy giữa điểm 1 và hai trong khoảng thời gian này
- Đọc lại đầu vào một khi điểm 2 đã đạt được để quyết định đi đâu