Thực hiện tìm đường hợp tác của David Silver trong thời gian thực


7

Tôi hiện đang triển khai thuật toán Tìm đường hợp tác của David Silver cho một trò chơi 2D với chuyển động dựa trên lưới (tất cả tám hướng).

Vấn đề tôi gặp khó khăn trong đầu là Bảng đặt chỗ liên quan đến thời gian thực. Tôi đã thực hiện đầy đủ thuật toán trong thử nghiệm riêng của mình; tuy nhiên, việc triển khai của tôi là theo lượt mà mọi người đều di chuyển với cùng tốc độ.

Trò chơi tôi đang cố gắng tích hợp tính năng dẫn đường nhóm vào chuyển động thời gian thực với các đơn vị có tốc độ khác nhau.


Tôi đã tổng hợp một vài cân nhắc tôi cần tính đến và một số có thể giúp tôi thực hiện điều này:

  1. Kẻ thù không tìm kiếm nhân vật của người chơi
  2. Tuy nhiên, một số đơn vị địch sẽ đi lang thang
  3. Kẻ thù sẽ có tốc độ di chuyển khác nhau tùy thuộc vào loại kẻ thù
  4. Người chơi di chuyển hình đại diện bằng cách nhấp vào đích (điều này bắt đầu một cuộc đi bộ)
  5. Người chơi có thể bắt đầu chạy bằng cách nhấp đúp vào đích (điều này có thể xảy ra ở giữa các nút lưới)
  6. Người chơi có các đồng minh theo hình đại diện
  7. Các đồng minh sẽ chạy để theo kịp hình đại diện nếu ở quá xa và bắt đầu đi lại nếu đủ gần (điều này cũng có thể xảy ra ở giữa các nút lưới)
  8. Tốc độ không phải là bội số hoàn hảo của nhau

Với những người đang xem xét, giải pháp một phần hiện tại của tôi bao gồm:

  • Do xem xét 1 và 2, kẻ thù sẽ chia sẻ các bảng đặt phòng vì tôi có thể khiến chúng di chuyển trên cùng một khoảng thời gian để thời gian của chúng khớp với nhau
  • Do cân nhắc 3 và 8, các bảng đặt phòng của kẻ thù sẽ khác nhau bởi tốc độ di chuyển. Tôi đang nghĩ làm theo cách này bởi vì tôi không chắc chắn làm thế nào để sử dụng một bảng đặt chỗ cho tất cả chúng nếu tốc độ của chúng không phải là bội số hoàn hảo của nhau.
  • Do các cân nhắc thay đổi tốc độ của 4, 5, 7 và 8, đường đi của người chơi và đồng minh sẽ được tính toán lại bất cứ khi nào họ bắt đầu đi bộ hoặc bắt đầu chạy vì điều đó sẽ ảnh hưởng đến việc điều phối đường đi.
  • Vì các đường dẫn có thể được tính toán lại cho hình đại diện của người chơi khi đang di chuyển, tôi sẽ cần phải có hai bảng đặt chỗ dành riêng cho người chơi (một cho đi bộ, một cho chạy). Tôi cũng có thể cần phải có hai bảng đặt chỗ để các đồng minh chia sẻ (một để đi bộ, một để chạy).
  • Do thực tế là các đường dẫn có thể được tính toán lại giữa các nút, tôi tin rằng tôi sẽ phải hạn chế thay đổi tốc độ chỉ xảy ra khi một đơn vị trực tiếp trên một nút thay vì có thể thay đổi tốc độ giữa các nút khi nó hoạt động. . Mặt khác, tôi tin rằng tôi sẽ phải tính thời gian cần thiết để đến nút tiếp theo và sau đó theo dõi nó trong bảng đặt phòng bằng cách nào đó.

Cuối cùng, đây là những điều tôi đang tự hỏi về:

  • Tôi phải hoàn toàn không hiểu Bảng đặt phòng nếu việc điều phối các đơn vị là khó khăn này. Làm cách nào để xác định thời gian của một nút trong bản đồ Không-thời gian nếu không mất bao lâu để một đơn vị đi từ nút này sang nút khác?
  • Chuyển động chéo sẽ là một vấn đề khi xác định thời gian của một nút trong bản đồ Không gian-Thời gian?
  • Có cách nào dễ dàng hơn để xử lý việc thực hiện ngắn này khi thực hiện thuật toán tìm đường nhóm khác không?
  • Nếu có một thuật toán tìm đường khác mà bạn đề xuất, tôi là tất cả, nhưng tại thời điểm phát triển này, rất có thể không có thời gian để thực hiện một cái gì đó mới trừ khi mã hóa nó cũng như tích hợp nó vào trò chơi sẽ mất ít thời gian hơn gây nhiễu thuật toán đã được mã hóa vào trò chơi.

Vui lòng đề xuất các cách thay đổi một chút cách kẻ thù, người chơi và đồng minh di chuyển nếu điều đó sẽ giúp thực hiện việc này dễ dàng hơn đáng kể. Tôi đánh giá cao bất kỳ sự giúp đỡ nào bạn cảm thấy muốn cung cấp. Cảm ơn vì đã dành thời gian cho tôi!


allecting-i.com/ASIPathSense/Overview - đây là một triển khai và giải thích. ya tôi cũng đang cố gắng để tìm ra điều này
Rakka Rage

Câu trả lời:


3

Không quen thuộc với phương pháp này trước khi đọc tài liệu được liên kết, có vẻ như sự nhầm lẫn đến từ việc sử dụng nhiều bảng đặt phòng. Điều đó sẽ thiếu điểm có một bảng đặt phòng. Bạn có thể ngăn va chạm giữa các đơn vị cùng loại, nhưng đơn vị nhanh và đơn vị chậm cố gắng vượt qua cùng một không gian vẫn có thể kết thúc bằng một điệu nhảy phản ứng va chạm khi chúng cố gắng di chuyển qua nhau. Hơn nữa, trang 11 của các địa chỉ pdf được liên kết có vấn đề cụ thể cho biết họ dự kiến ​​sẽ chia sẻ bảng đặt chỗ.

Nếu thiết kế của bạn yêu cầu một đơn vị thân thiện để có thể chạy qua một nhóm các đơn vị kẻ thù, đồng minh và kẻ thù cũng sẽ chia sẻ một bảng đặt phòng. Nếu bạn đặc biệt muốn họ thực hiện một điệu nhảy va chạm khi ở gần nhau, có thể bạn có thể sử dụng các bảng riêng biệt cho từng nhóm, nhưng tôi vẫn nghĩ nên giữ tất cả đường dẫn của họ trên cùng một bàn đặt trước và dựa vào logic hành vi để xác định xem họ dừng lại để tương tác hay tiếp tục di chuyển. Điều đó có nghĩa là bạn có thể hack một số logic của bạn bằng cách cố ý làm mờ đường dẫn, nhưng tôi rất khuyến khích bạn nên chống lại nó.

Tôi nghĩ rằng tôi thấy sự không chắc chắn xuất hiện khi di chuyển chéo hoặc bội số tốc độ khác nhau, nhưng một lần nữa pdf sẽ cho biết việc tiếp tục sử dụng cùng một bảng đặt chỗ và dành một không gian lớn hơn cho các đơn vị có tốc độ di chuyển không khớp hoàn toàn trong khoảng được thành lập bởi bảng. Nếu một đơn vị đang di chuyển theo đường chéo và sẽ chiếm một phần nhiều ô trong một số phần của bảng đặt chỗ, hãy dự trữ tất cả các ô đó cho khoảng thời gian đó. Nếu, x giây kể từ bây giờ, một đơn vị nhanh hơn hoặc chậm hơn sẽ nằm một phần trong một ô và một phần khác do di chuyển ở tốc độ không phải là bội số của khoảng thời gian được sử dụng trong bảng, hãy dự trữ cả hai ô.

Cuối cùng, thay đổi tốc độ đơn vị từ chạy sang đi bộ sẽ không tạo ra bảng đặt chỗ thứ hai, nó sẽ làm mới đường dẫn của đơn vị đó dọc theo một bảng đặt trước mà tất cả các đơn vị chia sẻ.

Trường hợp duy nhất mà tôi nghĩ rằng nó phù hợp để có nhiều bảng đặt chỗ là nếu bạn có độ cao chuyển động khác nhau (trong trò chơi 2D hoặc trò chơi kết xuất 3D trong đó chuyển động được giới hạn ở các mặt phẳng 2D) trong đó các đơn vị bay có thể vượt qua đầu của đơn vị mặt đất mà không va chạm. Trong trò chơi 3D đầy đủ, bạn sẽ sử dụng bảng đặt phòng 4D.

Nó có thể giúp để đọc một số hoạt hình. Về mặt khái niệm, bảng đặt phòng chia sẻ (trong tâm trí của tôi) một số yếu tố với hoạt hình một đỉnh được dự kiến ​​sẽ chuyển từ thời điểm này sang điểm đó, bắt đầu từ thời điểm này, kết thúc tại thời điểm này, trong khi đồng hồ trò chơi là tất cả nhưng được đảm bảo không cập nhật hoàn hảo trong thời gian với khoảng thời gian keyframe của mô hình.


Cảm ơn bạn đã phản hồi với một số hiểu biết và đề xuất hữu ích! Hoàn toàn ngẫu nhiên (và đủ thú vị), tôi đã hoàn thành việc thực hiện thuật toán trong thời gian thực trong tuần này. Bạn đúng rằng chỉ có một bảng đặt phòng được sử dụng. Tôi sẽ đăng giải pháp của mình cho vấn đề này trong vài tuần tới khi tôi tìm thấy nhiều thời gian hơn. (ngày lễ, thời gian khủng hoảng, v.v ...)
jsea
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.