Tôi đang phát triển một công cụ trò chơi 2D nhỏ. Các ký tự có một phương thức vẽ hiện đang làm như sau:
- Tính toán vị trí mới của nhân vật theo tốc độ của nó, v.v.
- Cập nhật ô lưới va chạm **
- Vẽ nhân vật ở vị trí mới
** Tôi đã tạo lưới va chạm để giảm số lần kiểm tra giao lộ
Bây giờ thuật toán cơ bản mà tôi đã nghĩ để phát hiện va chạm là:
For Each Character
Check intersection with characters in surrounding 8 cells
Tôi chỉ có thể đặt mã này trong phương pháp sơn. Nhưng đây là vấn đề tôi dự đoán.
Giả sử hai ký tự A và B nằm trong các ô liền kề trong lưới va chạm. Bây giờ theo thuật toán trên trong lần lặp của ký tự A, nó sẽ phát hiện ra rằng nó đã va chạm với B. Trong lần lặp cho ký tự B, nó sẽ phát hiện ra rằng nó đã va chạm với A.
Nhưng tôi có một ý tưởng rằng khi A phát hiện ra rằng nó đã va chạm với B, nó nên thông báo cho B rằng nó đã va chạm với A. Điều này sẽ tiết kiệm rất nhiều so sánh khi có hơn 2 diễn viên va chạm. Nhưng tôi không chắc làm thế nào để xử lý việc này. Tôi nghĩ thay vì mỗi nhân vật kiểm tra sự va chạm của nó, tôi nên kiểm tra sự va chạm bên trong vòng lặp trò chơi.
Cách tiếp cận này sẽ đúng? Làm thế nào bạn đã xử lý loại vấn đề này? Tôi nghĩ về những điều lưới va chạm bản thân mình. Có bất kỳ sự thay thế cho logic lưới va chạm?