2013-05-09 39 views
10

Nói chung để phát hiện va chạm trong các trò chơi vải tôi sử dụng một cái gì đó như:Làm thế nào để phát hiện va chạm giữa các đối tượng chuyển động nhanh

function collides(a, b) { 
    return a.x < b.x + b.width && 
    a.x + a.width > b.x && 
    a.y < b.y + b.height && 
    a.y + a.height > b.y; 
} 

Nhưng điều này chỉ phát hiện va chạm nếu các đối tượng được chạm vào thời điểm khung được xử lý. Nếu tôi có một sprite có tốc độ (tính bằng pixel/frame) lớn hơn chiều rộng của một chướng ngại vật trong đường đi của nó, nó sẽ đi qua chướng ngại vật mà không bị va chạm được phát hiện.

Làm cách nào để kiểm tra nội dung giữa sprite và điểm đến của nó?

+1

Trên mỗi khung hình, kiểm tra xem một vectơ có độ dài tốc độ sprite của bạn giao cắt với đối tượng hay không. –

+2

Bạn có thể cân nhắc việc yêu cầu điều này trên [GameDev.SE]. – zzzzBov

+0

Cũng liên quan: http://stackoverflow.com/questions/7364884/problem-with-collision-detection-of-a-fast-moving-ball-with-a-racket-controlled – JayC

Trả lời

2

Đó thường là một vấn đề khó khăn và đối với giải pháp chất lượng cao, chẳng hạn như thư viện Hộp thư 2D sẽ hữu ích.

Giải pháp nhanh chóng và bẩn (cho kết quả dương tính giả trên các đối tượng chuyển động theo đường chéo) - kiểm tra va chạm giữa các hộp bao phủ vị trí của đối tượng trong khung trước đó.

Thay vì sử dụng a.xmin(a.x, a.x - a.velocity_x), thay vì sử dụng a.x + a.widthmax(a.x + a.width, a.x + a.width - a.velocity_x) vv

Nếu đối tượng đang chuyển động nhanh là nhỏ (một viên đạn), sau đó kiểm tra va chạm giữa dòng (từ nguồn gốc của nó đến nguồn gốc + vận tốc) và các hộp vật khác.

0

Bạn nên sử dụng toàn bộ khu vực được quét (trong khoảng thời gian cập nhật) bởi đối tượng chuyển động làm hộp giới hạn để kiểm tra đối với vật cản.

Các vấn đề liên quan