Chiến lược đối phó với đám đông tại các điểm choke


9

Gần đây tôi đã chuyển đổi công cụ trò chơi của mình từ hành vi lái sang chuyển động dựa trên xung lực với độ phân giải va chạm dựa trên thời gian thích hợp. Điều này đã giải quyết rất nhiều vấn đề (không còn đường hầm, yay) và làm cho mô phỏng trở nên ổn định hơn. Tuy nhiên, với sự ổn định đã đến một vấn đề mới.

Vấn đề va chạm cửa.

Ba quả bóng bắt đầu hành trình của họ ở gần cuối hình ảnh, mục tiêu của họ là nơi quả bóng hồng đã dừng lại. Trên đường đi, những quả bóng màu đỏ và màu xanh lá cây đã bị mắc kẹt tại điểm sặc trên tường.

Trước đây, tôi có thể dựa vào các lỗi dấu phẩy động và sự không ổn định chung của các hành vi lái để làm cho các quả bóng màu xanh lá cây và màu đỏ chen lấn nhau cho đến khi chúng vượt qua được điểm nghẹt thở. Bây giờ với độ phân giải va chạm thích hợp, các lực tác dụng lên các quả bóng triệt tiêu lẫn nhau, kết quả là các quả bóng vẫn hoàn toàn đứng yên.

Những phương pháp thường được sử dụng để giải quyết các tình huống như vậy? Có lẽ một số hệ thống xếp hàng ưu tiên sẽ hoạt động, mặc dù tôi có thể thấy nó trở nên phức tạp một khi tôi cần quyết định mức độ ưu tiên giữa hơn 2 đối tượng.


Tôi cũng thất vọng với quản lý đám đông chỉ đạo. Bạn có thể vui lòng thêm một số liên kết về "chuyển động dựa trên xung lực" vào câu hỏi không?
Kromster

Một xung lực chỉ là lực lượng * thời gian. Điều tôi đang cố gắng nói là tôi đã chuyển sang một mô hình dựa trên vật lý bằng cách sử dụng phát hiện va chạm liên tục thay vì rời rạc. Các hành vi chỉ đạo không thực sự tôn trọng những thứ như định luật chuyển động của Newton, chúng được thiết kế để bắt chước đàn chim chứ không phải là mô phỏng vật lý. Tôi thực sự không có bất kỳ liên kết gamedev nào cho chuyển động, nó thực sự chỉ là vật lý học trung học. Tuy nhiên, cuốn sách Real Time Collision Recognition của Christer Ericson gần như là cuốn kinh thánh dành cho phát hiện va chạm liên tục.

Câu trả lời:


3

Chỉ định mỗi đối tượng có thể di chuyển một chỉ mục duy nhất và cấm một đối tượng có chỉ số cao hơn di chuyển một tác nhân có chỉ số thấp hơn. Điều này sẽ cho phép các đối tượng 'cũ' nâng niu những đối tượng 'mới hơn', nhưng không phải ngược lại & ít chi phí hơn so với việc xếp hàng. Về cơ bản, chỉ số hoạt động như một ưu tiên di chuyển.


1
Tôi đã thực hiện điều này và nó hoạt động trong các đơn vị không còn bị kẹt nữa, mặc dù tôi phải nói rằng nó không phải lúc nào cũng đẹp. Một số cảnh báo: chỉ sử dụng chỉ số để xác định mức độ ưu tiên cho các đối tượng di chuyển có cùng khối lượng, các đối tượng lớn sẽ đẩy các vật nhỏ ra khỏi đường một cách tự nhiên. Chỉ sử dụng chỉ mục để xác định mức độ ưu tiên cho các đối tượng trong cùng một nhóm. Một đối tượng kẻ thù không thể hoạt động như một bức tường bất động đối với một đối tượng người chơi chỉ vì nó được sinh ra trước và do đó có mức độ ưu tiên cao hơn.

Tôi đã không xem xét khối lượng hoặc đội; điều chỉnh của bạn có vẻ như là cách hợp lý để vá câu trả lời của tôi.
Gulalek

2

thêm thời gian để tìm đường

đây là một bài báo nói về khối thời gian đó: http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Appluggest_files/coop-path-AIWisdom.pdf

nhập mô tả hình ảnh ở đây

và đây là một triển khai Objective-C: http://allecting-i.com/ASIPath Downloader

nhập mô tả hình ảnh ở đây


1
Tôi đã đọc và thực hiện điều này trước đây. Ngay cả với nhiều chủ đề, nó cũng không được sử dụng nhiều trong tình huống của tôi. Trong một trò chơi RTS có thể có hàng trăm đơn vị di chuyển và lưới bản đồ lớn hơn 500 hình vuông sang một bên. Chi phí để tính toán đường dẫn dựa trên thời gian cho mỗi đơn vị là quá cao. Chỉ cần thêm, tôi không nói câu trả lời của rakkarage là sai, đó là một thuật toán rất gọn gàng. Tôi chỉ nói rằng các tình huống hữu ích bị hạn chế bởi sự phức tạp của nó.

ya tôi chỉ chạy lại toàn bộ thuật toán tìm đường của mình mỗi lượt thay vì hoàn toàn hiểu và thực hiện điều này nhưng tôi nghĩ rằng cuối cùng tôi có thể phải
Rakka Rage

0

Trên thực tế, tôi không nghĩ bạn nên sửa nó. Nếu (tôi có thể đoán) các mũi tên chỉ ra các vectơ lực được áp dụng cho bất kỳ hình cầu nào, tại bất kỳ vị trí nào trong lưới (có thể được nội suy "bi-linearly" hoặc tương tự, hoặc bằng cách nào đó "tương tự" hơn là chỉ 0/1), thì cũng vậy hành vi là chính xác về thể chất và bạn nên tự chúc mừng mình vì đã có một giải pháp ứng xử tốt.

Hai quả cầu cân bằng tốt, khi chúng ngồi đó và ghét nhau. Rõ ràng, nếu chúng di chuyển một chút sang phải, "mũi tên lực" sang phải ảnh hưởng đến quả cầu bên phải nhiều hơn một chút (và ngược lại ở mặt cầu bên trái; ít hơn một chút), và vì vậy chúng di chuyển trở lại cân bằng. Đây là cách nó nên được.

Imho, những gì nên được sửa chữa là bức tường, hoặc kích thước hình cầu, hoặc một cái gì đó khác trong số các bản dựng. Bạn đã tạo ra một sự bất khả thi và hành vi đúng trong tình huống đó theo đó là một sự bế tắc (xin lỗi vì những từ ngữ sai, tôi hy vọng bạn vẫn nhận được chúng :-)).

Có lẽ thay vào đó hãy vô hiệu hóa các mũi tên lực trái / phải gần nhất hoặc sắp xếp chúng theo một cách khác không đối xứng và không khuyến khích cân bằng ?

Tôi nghĩ rằng nó sẽ là một sửa chữa xấu để sửa chữa một cách giả tạo ... sẽ có lông quá sớm.


Điều này không trả lời câu hỏi. Tôi hiểu động lực của bạn, nhưng cuối cùng câu hỏi là làm thế nào để đối phó với tình huống. Chúng tôi không biết ý định chơi trò chơi, vì vậy phán đoán rằng đây có phải là vấn đề hay không là tùy thuộc vào Fibble. Thay đổi bức tường có thể thay đổi mục đích của chokepoint. Câu hỏi là một vấn đề hợp lệ có thể được giải quyết.
Felsir

Câu trả lời của tôi là cơ bản: (tái) sắp xếp các lực lượng hoặc sắp xếp lại một thứ khác trong kịch bản nhưng không làm xáo trộn bộ giải vật lý (" Imho, cái cần sửa là bức tường, hoặc kích thước hình cầu, hoặc cái gì khác trong các khối xây dựng chính họ. "). Câu hỏi là " Phương pháp nào thường được sử dụng để giải quyết các tình huống như vậy?" Tôi nghĩ rằng A của tôi rất giống một "phương pháp thường được sử dụng" và rất nhiều giải pháp cho vấn đề. Ví dụ, các trò chơi minigolf trực tuyến (mà Q nhắc nhở rất nhiều) làm nghẹt thở các quả bóng, nếu môi trường đang kêu gọi điều đó xảy ra. Vật lý thất thường là một cách xấu, imo.
Bão tố

Tôi đồng ý rằng người giải quyết vật lý nên vẫn còn trong chiến thuật. Câu hỏi nêu rõ các quả cầu nên tìm kiếm mục tiêu, về cơ bản làm thế nào để thay đổi hành vi của các tác nhân (do đó không phải là vật lý hoặc bố cục cấp độ). Việc thay đổi bố cục cấp độ có thể giải quyết sự xuất hiện này - nhưng nó sẽ cắt theo một bố cục khác. Vì vậy, câu hỏi khác với ví dụ minigolf mà bạn cung cấp vì trong trường hợp này, câu hỏi là để tránh cụ thể một bế tắc.
Felsir

Như bạn thấy, tôi cũng đề xuất sắp xếp lại các lực lượng trong câu trả lời. Có vẻ như còn lại rất ít sau đó :-).
Bão tố

Sắp xếp lại các bức tường hoặc thay đổi kích thước hình cầu là không khả thi trong trường hợp của tôi, mặc dù nó có thể ở những người khác. Ảnh chụp màn hình là từ chế độ gỡ lỗi của động cơ RTS. Có nhiều kích cỡ đơn vị khác nhau và người chơi có thể đặt các bức tường theo ý muốn. Các mũi tên bạn nhìn thấy được tạo bởi thuật toán Dòng chảy nhanh của tôi. Chúng là các vectơ chuẩn hóa được sử dụng để tác động đến hướng di chuyển của các đơn vị di chuyển. Không thể thay đổi độ dài của vectơ vì tất cả các đơn vị di chuyển trong nhóm đều có chung Trường lưu lượ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.