Gần đây tôi đã tham gia vào XNA và phải nói rằng tôi yêu nó. Như một trò chơi hello world, tôi quyết định tạo ra trò chơi kinh điển "Snake". Phiên bản 90 độ rất đơn giản và dễ thực hiện. Nhưng khi tôi cố gắng tạo ra một phiên bản của nó cho phép xoay 360 độ bằng cách sử dụng mũi tên trái và phải, tôi đã gặp phải một vấn đề.
Những gì tôi đang làm bây giờ bắt nguồn từ phiên bản 90 độ: Lặp lại qua từng bộ phận cơ thể rắn bắt đầu ở đuôi và kết thúc ngay trước đầu. Điều này hoạt động tuyệt vời khi di chuyển cứ sau 100 mili giây. Vấn đề với điều này là nó tạo ra một phong cách chơi trò chơi rắc rối vì về mặt kỹ thuật, trò chơi tiến triển chỉ với 6 khung hình / giây thay vì tiềm năng 60.
Tôi muốn di chuyển con rắn mỗi vòng lặp trò chơi. Nhưng thật không may bởi vì con rắn di chuyển với tốc độ kích thước đầu của nó, nó đi quá nhanh. Điều này có nghĩa là đầu sẽ cần di chuyển với mức tăng nhỏ hơn nhiều, chẳng hạn như (2, 2) theo hướng của nó chứ không phải là những gì tôi có bây giờ (32, 32). Bởi vì tôi đã làm việc với trò chơi này trong vài tuần khi quản lý trường học, tôi nghĩ rằng tôi đã suy nghĩ quá nhiều về cách thực hiện điều này. Đây có lẽ là một giải pháp đơn giản, tôi chỉ không nắm bắt được nó.
Đây là một số mã giả cho những gì tôi đã thử dựa trên những gì có ý nghĩa với tôi. Tôi thực sự không thể nghĩ ra một cách khác để làm điều đó.
for(int i = SnakeLength - 1; i > 0; i--){
current = SnakePart[i], next = SnakePart[i - 1];
current.x = next.x - (current.width * cos(next.angle));
current.y = next.y - (current.height * sin(next.angle));
current.angle = next.angle;
}
SnakeHead.x += cos(SnakeAngle) * SnakeSpeed;
SnakeHead.y += sin(SnakeAngle) * SnakeSpeed;
Điều này tạo ra một cái gì đó như thế này: Code in Action . Như bạn có thể thấy mỗi phần luôn ở phía sau đầu và không tạo ra hiệu ứng "Đường mòn".
Một ví dụ hoàn hảo về những gì tôi sẽ tìm thấy ở đây: Data Worm . Không phải xoay vòng khung nhìn mà là hiệu ứng kéo dài của các hình tam giác.
Cảm ơn vì bất kì sự giúp đỡ!