Cách tách các vật thể va chạm mà không tạo thêm va chạm


11

Giả sử tôi sử dụng một hệ thống phát hiện va chạm riêng biệt đơn giản, nơi tôi di chuyển tất cả các đối tượng sau đó kiểm tra va chạm. Tôi muốn bất kỳ đối tượng va chạm nào được tách ra (tất nhiên) và được chỉ định vận tốc phản ứng thích hợp (nảy, trượt, dừng, v.v.).

Khi tôi có một cặp đối tượng va chạm, làm cách nào để tách chúng ra mà không kết thúc với một hoặc cả hai vật thể đó va chạm với các vật thể khác?

Câu trả lời:


8

Đây không phải là một vấn đề dễ dàng để giải quyết nói chung. Trong một động cơ vật lý, nó sẽ được xử lý bởi bộ giải đối kháng. Có nhiều loại bộ giải ràng buộc khác nhau, nhưng một trong những cách dễ hiểu nhất là bộ giải xung liên tiếp.

Erin Catto đã đưa ra một lời giải thích hay về bộ giải xung liên tiếp tại một số GDC trước đó, chúng có thể được tải xuống từ trang tải xuống Box2D , xem ví dụ về GDC 2009.


Tôi tò mò về điều này. Dựa vào mức độ phổ biến của nhu cầu phát hiện và giải quyết va chạm, tôi đã giả sử có ít nhất một thuật toán độ phân giải đơn giản phù hợp cho các game arcade và hành động.
AJM

2
Không hẳn vậy. Vào thời xưa (SNES, v.v.), họ đã gặp phải những vấn đề tròn trịa như thế này với những thay đổi hoặc thỏa hiệp về thiết kế trò chơi. Ví dụ. Trong Super Mario, khi người chơi bị tấn công, Mario sẽ bất khả chiến bại trong vài giây để vượt qua va chạm thứ hai. Trong Double Dragon, các va chạm được bỏ qua cho người chơi cho đến khi hoạt ảnh rơi ngược đã kết thúc.
yaustar

@yaustar Thật ra Mario không có va chạm với kẻ thù. Nó chỉ nhận sát thương khi hitbox của nó đè lên chúng.
Mùa đông

3

Cách duy nhất bạn có thể ngăn điều này xảy ra là ngăn chặn sự xâm nhập ở nơi đầu tiên. Trước khi bạn di chuyển một đối tượng, bạn chắc chắn rằng đó là một động thái hợp pháp. Lưu ý rằng điều này có nghĩa là bạn phải di chuyển các đối tượng của mình cùng một lúc để tránh trường hợp hai đối tượng di chuyển vào nhau.

Nếu không có sự xâm nhập nào xảy ra, bạn không phải thiết lập lại bất kỳ vị trí nào và do đó bạn sẽ không kích hoạt bất kỳ sự xâm nhập thứ cấp nào.


2

Những gì tôi thường làm là như sau:

Khi bạn tách các đối tượng và bạn kết thúc với nhiều va chạm hơn, bạn chỉ cần lặp lại một lần nữa, cho đến khi đạt được số bước tối đa hoặc các đối tượng thâm nhập dưới ngưỡng xác định trước.


Điều đó cực kỳ không ổn định. FPS trong trò chơi của bạn có thể tăng đột biến bất cứ lúc nào người chơi gây rối bằng cách đẩy vật nhẹ. Nó sẽ tốt hơn để giải quyết nó khung tiếp theo.
Mùa đông
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.