Làm thế nào bạn có thể mô hình hóa mùi hương đường mòn trong một trò chơi?


11

Giả sử bạn muốn tạo một trò chơi 3D và có người chơi hoặc điện thoại di động, có thể điều khiển các thực thể khác bằng cách đi theo những con đường mùi hương của họ. Có cấu trúc dữ liệu nào phù hợp với trường hợp sử dụng này không?

Nếu bạn chỉ có vài cá nhân, có lẽ bạn có thể làm một cái gì đó như bản đồ tọa độ 3D cho ID thực thể, nhưng mùi hương thực sự hoạt động khác nhau, bởi vì nó mờ dần theo thời gian, nhưng chậm. Và hầu hết thời gian, bạn chỉ có thể biết khoảng những gì đã đến đó, và khoảng bao nhiêu thứ thuộc loại đó đã đi đến đó. Và sự gần đúng trở nên tồi tệ nhất theo thời gian, cho đến khi nó biến mất.

Tôi tưởng tượng nó giống như bắt đầu với một con số chính xác, và dần dần mất đi các chữ số có nghĩa ít nhất, cho đến khi bạn mất đi chữ số có ý nghĩa nhất. Nhưng điều đó không thực sự giúp tôi, vì ID thực thể thường không được mã hóa để chứa loại thực thể, ngoài ID cá nhân đó.


Pháo đài lùn đang làm một cái gì đó giống như nó trong phiên bản tiếp theo.
Russell

Câu trả lời:


10

Có rất nhiều cách bạn có thể làm điều này; Tôi sẽ đề xuất các lựa chọn rõ ràng cho tôi về các lựa chọn của tôi, nhưng có rất nhiều biến thể có thể được thiết kế. Tuyên bố miễn trừ trách nhiệm: Tôi chưa thực sự thực hiện bất cứ điều gì như thế này.

Đầu tiên, bạn cần một cấu trúc dữ liệu bao trùm thế giới của bạn. Nếu bạn đang thực hiện chuyển động NPC trong không gian 3D, thì có lẽ bạn sẽ có hoặc cuối cùng sẽ cần một cấu trúc như vậy cho các mục đích tìm đường - giả sử, lưới điều hướng. Vì vậy, giả sử chúng ta có thể thêm một trường cho mùi hương vào đó.

Vì vậy, những gì chúng ta đặt trong lĩnh vực đó? Tôi đề xuất một danh sách các hồ sơ ( mùi hương , sức mạnh , thời gian ). Danh sách này được giữ ở hoặc dưới một độ dài tối đa và được sắp xếp theo độ mạnh - vì vậy mùi hương yếu sẽ bị loại bỏ. Các mùi hương có thể là một trong hai cái gì đó xác định rõ ràng cho từng đối tượng hoặc chủ thể loại, hoặc nó chỉ đơn giản có thể là loại thực thể - tùy thuộc vào những gì bạn muốn để có thể theo dõi rõ ràng. Thời gian là dấu thời gian khi bản ghi mùi này được cập nhật lần cuối.

Khi một thực thể đi qua một khu vực (ví dụ như một tam giác nhất định của lưới điều hướng), đã đến lúc cập nhật danh sách mùi hương. Đầu tiên, giảm tất cả các điểm mạnh theo lượng thời gian trôi qua theo giá trị thời gian so với thời gian hiện tại - phân rã theo cấp số nhân có lẽ là một lựa chọn hợp lý ở đây. Sau đó thêm mùi hương của thực thể hiện tại vào danh sách, có lẽ với độ mạnh phụ thuộc vào loại thực thể. Sau đó, nếu danh sách chỉ quá dài, loại bỏ sức mạnh thấp nhất.

Để có kết quả theo dõi, hãy tìm mùi hương trong danh sách cho vị trí hiện tại, sau đó làm tương tự cho tất cả các hàng xóm của nó và đi theo hướng mùi hương mạnh nhất (đó không phải là hướng mà người theo dõi vừa xuất phát).

Đối với chủ nghĩa hiện thực thêm:

  • Khuếch tán: định kỳ chuyển một phần mùi hương ở mỗi vị trí sang các vùng lân cận. Điều này gây nhầm lẫn những con đường mòn, nhưng cũng có nghĩa là những thứ đứng yên có thể được đánh hơi ra (tìm thức ăn, xác chết, v.v.). (Thậm chí đó là một loại AI được công nhận dựa trên các hành động hoàn toàn dựa trên loại thông tin này - cảnh quan cung cấp thông tin về cách đi để có được một tài nguyên cụ thể, v.v. Tôi quên tên của nó.) tính toán khuếch tán khắp nơi.

  • Mùi hương mạnh nên ngăn chặn việc phát hiện mùi hương yếu; chia sức mạnh của mùi hương tìm kiếm cho sức mạnh của mùi hương mạnh nhất và thất bại nếu nó quá nhỏ. Điều này có thể cho phép cố tình nhầm lẫn dấu vết mùi hương của một người.


9

Tôi sẽ sửa đổi một kỹ thuật gọi là ánh xạ ảnh hưởng để tạo bản đồ cho mùi hương. Nó sẽ tan biến và mờ dần một cách tự nhiên, pha trộn và cạnh tranh với các mùi hương khác, và có lẽ nhiều hơn nữa. Điều này nghe có vẻ như sẽ làm chính xác những gì bạn cần, nhưng nó có thể phức tạp hơn những gì bạn đang muốn thực hiện. Ít nhất nó sẽ cung cấp cho bạn một số ý tưởng hay, và nó khá đơn giản để thực hiện trên bất kỳ cấu trúc nào bạn đang sử dụng.

Một hướng dẫn / giải thích tôi thấy hữu ích.

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.