Як ви могли б моделювати «ароматні стежки» в грі?


11

Скажімо, ви хочете створити 3D-гру та мати або гравців, або мобільних телефонів, щоб мати змогу прокладати іншу сутність, дотримуючись їх нюху. Чи є відома структура даних, яка відповідає цьому випадку використання?

Якщо у вас є лише кілька людей, ви, ймовірно, можете зробити щось на зразок карти тривимірної координати для ідентифікатора сутності, але справжній аромат працює інакше, тому що він згасає з часом, але повільно. І більшу частину часу ви можете знати лише приблизно, що там пішло, і приблизно, скільки речей цього типу туди зайшло. І наближення з часом стає найгіршим, поки його не пропаде.

Я гадаю, що це як би починати з точного числа і повільно втрачати найменш значущі цифри, поки не втратитьш і найзначнішу цифру. Але це не дуже допомагає мені, оскільки ідентифікатори об'єктів зазвичай не кодуються таким чином, щоб вони містили тип сутності, крім індивідуального ідентифікатора.


Карликова фортеця робить щось подібне у наступному випуску.
Рассел

Відповіді:


10

Існує велика різноманітність у тому, як ви могли це зробити; Я збираюся запропонувати "очевидний для мене" вибір, але є безліч варіацій, які можна було б розробити. Відмова: Я насправді нічого подібного не реалізував.

По-перше, вам потрібна структура даних, яка охоплює ваш світ. Якщо ви робите рух NPC у тривимірному просторі, то, ймовірно, ви маєте або, зрештою, знадобиться така структура для цілей маршрутизації - скажімо, навігаційної сітки. Отже, припустимо, що ми можемо додати поле для ароматів до цього.

Отже, що ми робимо в цьому полі? Пропоную список записів ( запах , сила , час ). Цей список зберігається на максимальній довжині або нижче і відсортований за силою - тому слабкі аромати будуть відкинуті. Запах може бути що - то явно визначено для кожного об'єкта або об'єкта типу, або це може бути просто тип об'єкту - в залежності від того, що ви хочете , щоб мати можливість відстежувати чітко. Час є відмітка про часу, коли в останній раз був оновлений цей аромат запис.

Коли об'єкт проходить через область (наприклад, заданий трикутник навігаційної сітки), настав час оновити список ароматів. По-перше, зменшення всіх сильних сторін відповідно до кількості часу, що пройшло відповідно до значення часу, порівняно з поточним часом - експоненціальний занепад, ймовірно, є розумним вибором. Потім додайте до списку поточний аромат сутності, можливо, залежно від типу сутності. Тоді якщо список просто занадто довгий, відмовтеся від найнижчої міцності.

Щоб отримати результат відстеження, знайдіть аромат у списку для поточного місця розташування, потім зробіть те саме для всіх його сусідів та йдіть у напрямку найсильнішого запаху (це не напрямок, з якого щойно з'явився трекер).

Для додаткового реалізму:

  • Дифузія: періодично передайте частинку аромату в кожному місці своїм сусідам. Це плутає сліди, але також означає, що нерухомі речі можна винюхати (знайти їжу, трупи тощо). (Це навіть визнаний різновид AI, що базувати дії цілком на цьому типі інформації - пейзаж надає інформацію про те, яким шляхом рухатися, щоб отримати певний ресурс тощо. Я забуваю його назву.) Основним недоліком є ​​витрачений час розрахунок дифузії скрізь.

  • Сильні аромати повинні перешкоджати виявленню слабких запахів; розділіть силу шуканого аромату на силу найсильнішого запаху, і невдача, якщо вона занадто мала. Це могло б дозволити навмисне заплутати слід від запаху.


9

Я б змінив техніку, яку називають картою впливу, щоб створити карту для ароматів. Це природно розсіюється і зникає, поєднується з іншими ароматами і, мабуть, ще більше. Це здається, що це зробить саме те, що вам потрібно, але це може бути більш детально, ніж те, що ви хочете реалізувати. Принаймні, це повинно дати вам кілька хороших ідей, і це досить просто здійснити поверх будь-якої структури, яку ви зараз використовуєте.

Підручник / пояснення мені здалося корисним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.