Có một cách đơn giản để ngăn chặn kẻ thù đứng cùng một chỗ?


24

Vì vậy: trò chơi từ trên xuống, kẻ thù của tôi đuổi theo người chơi, khi chúng ở trong một khoảng cách nhất định, chúng đứng yên và bắn. Nếu tất cả chúng đều đến từ cùng một hướng thì tất cả chúng sẽ đứng cùng một chỗ (tức là đứng "bên trong" nhau), vì hiện tại tôi không thực hiện phát hiện va chạm giữa các kẻ thù - chúng có thể tự do vượt qua nhau.

Một cách đơn giản xung quanh này là gì? Hoặc một số hình thức phát hiện va chạm hoặc một số ai?


1
Giới hạn bản thân với một kẻ thù. : P
Kylotan

Câu trả lời:


18

Bạn không cần phát hiện va chạm, nhưng bạn sẽ cần cung cấp cho kẻ thù của mình một chút thông minh và để chúng tránh chạy vào nhau. Phát hiện va chạm mà không có điều đó sẽ khiến kẻ thù của bạn trông thật ngu ngốc - mọi người tránh mặt nhau, họ thường không va chạm.

Tra cứu "đổ xô" cho một số hành vi đơn giản.

Ý tưởng cơ bản là mọi thứ nên hướng về phía người chơi, nhưng tránh xa một chướng ngại vật gần gũi (nhau, tường, loại đó).


6
Nó cũng được gọi là boids. Đọc về các quy tắc đơn giản xung quanh các boids ở đây: en.wikipedia.org/wiki/Boids Nên tầm thường để thực hiện các hạn chế này.
Thợ làm móng

12

Bạn có thể truyền cảm hứng cho bản thân về các hành vi đổ xô , chẳng hạn như Boids .

Những xu hướng này bao gồm 3-4 quy tắc rất đơn giản, được áp dụng chính xác, dẫn đến các hành vi rất thỏa mãn và "có vẻ phức tạp".

Trong trường hợp của bạn, bạn có thể thử một cái gì đó như thế này:

  • Tách (bán kính tối thiểu giữa kẻ thù)
  • Sự gắn kết (vì vậy họ đi du lịch theo nhóm)
  • Căn chỉnh (để chúng có xu hướng di chuyển theo cùng một hướng)
  • Được nhắm mục tiêu (họ nên có xu hướng di chuyển về phía người chơi)

Đây gần như là một bản sao nguyên văn câu trả lời của JasonD. Tôi thề tôi đã không nhìn vào nó trước khi đăng.
egarcia


3

Bạn có thể muốn kiểm tra sự khuếch tán hợp tác (hình ảnh động tuyệt vời ở đây) hoặc một số loại mô hình chống phản xạ khác cho chuyển động. Mặc dù thuật toán khuếch tán trong và bản thân nó có thể không ngăn được kẻ thù vượt qua, bạn có thể thêm các ràng buộc bổ sung để làm cho nó không thể hoặc không thể.


Tiết lộ đầy đủ: khá chắc chắn tôi đã tìm thấy liên kết khuếch tán hợp tác ở đây ở đâu đó trên GD, nhưng tôi không thể tìm thấy bài viết đề cập đến nó ngay bây giờ. Đó là một tìm kiếm khá. =)
leander

Điều này là siêu tuyệt vời nhưng tôi hơi phức tạp hơn tôi cần. Dù sao cũng sẽ đọc whitepaper nhưng quản lý để thực hiện giải pháp đơn giản hơn.
Iain

2

Điều gì nếu bạn không cho phép di chuyển qua các đơn vị khác? Dường như với tôi bạn sẽ cần nó sớm hay muộn. Bất cứ khi nào đường dẫn hiện tại bị chặn bởi một đơn vị, hãy điều chỉnh đường dẫn để di chuyển xung quanh đó.


2

Có một số tài liệu tham khảo cho các hành vi lái và đổ xô tại trang web của Craig Reynold . Chúng tương đối đơn giản để thực hiện nhưng có thể tạo ra một số hành vi nổi lên đáng yêu.


Đây thực chất là câu trả lời giống như 2 câu hỏi còn lại, nhưng +1 cho liên kết - Trang web đó là một tài liệu tham khảo thực sự tốt.
HỎI

1

Tất cả các câu trả lời khác tạo ra kết quả tốt hơn, nhưng cách rẻ nhất (?) Để tránh nhóm hoàn chỉnh là chỉ cần thêm một vectơ ngẫu nhiên có thể là 25% của vectơ chuyển động được tính toán ban đầu để các đối tượng nảy xung quanh một chút trong nhóm blob chung . Nó sẽ không khiến mọi thứ hoàn toàn tách rời nhau, nhưng tùy thuộc vào những gì bạn đang cố gắng đạt được, tôi đã thấy điều này có thể đầy đủ. Các đối tượng vẫn có thể nhóm với phương thức này nếu bạn chạy các vòng tròn xung quanh chúng, nhưng theo thời gian chúng có xu hướng khuếch tán.

Đây là một trò chơi nhỏ - hãy để tôi thực hiện vài năm trước minh chứng cho phương pháp này: http://deleter.phatcode.net/index.php?page=projects&p=4


1

Mọi người luôn đưa ra các boids vì điều đó mang lại kết quả rất tốt, nhưng việc thực hiện các boids có thể là quá mức cho mục đích cụ thể của bạn. Trước đây, tôi đã nhận được kết quả rất tốt bằng cách chỉ cần ngẫu nhiên vị trí mục tiêu trong một vòng tròn nhỏ.

Ví dụ: đối với bản demo tôi xây dựng trong Unity, tôi đã sử dụng lệnh Random.insideUnitSphere để thực hiện các cú ném bóng


1 Tôi đồng ý, một ví dụ về chiến lược này (với lẽ một chút bảo đảm tốt hơn về không chồng chéo) có thể được tìm thấy ở đây: “Sắp đặt” các đơn vị trong RTS trò chơi
MichaelHouse

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.