Come hai potuto modellare le "tracce di profumo" in un gioco?


11

Supponiamo che tu voglia creare un gioco 3D e che sia i giocatori, sia i cellulari, siano in grado di trattare altre entità seguendo le loro tracce di profumo. Esiste una struttura di dati nota che corrisponda a questo caso d'uso?

Se hai solo poche persone in giro, probabilmente puoi fare qualcosa di simile a una mappa di coordinate 3D in base all'ID entità, ma il vero profumo funziona in modo diverso, perché si attenua nel tempo, ma lentamente. E la maggior parte delle volte, puoi solo sapere approssimativamente cosa è andato lì e approssimativamente quante cose di quel tipo sono andate lì. E l'approssimazione diventa peggiore con il tempo, fino a quando non è andata.

Immagino sia un po 'come iniziare con un numero esatto e perdere lentamente le cifre meno significative, fino a perdere anche le cifre più significative. Ma questo non mi aiuta davvero, perché gli ID entità non sono normalmente codificati per contenere il tipo di entità, oltre al suo ID individuale.


Dwarf Fortress sta facendo qualcosa di simile nella prossima versione.
Russell,

Risposte:


10

C'è molta varietà nel modo in cui potresti farlo; Suggerirò le scelte "ovvie per me", ma ci sono molte varianti che potrebbero essere progettate. Disclaimer: non ho implementato nulla di simile.

Innanzitutto, hai bisogno di una struttura di dati che copra il tuo mondo. Se stai eseguendo il movimento NPC in uno spazio 3D, probabilmente hai, o alla fine avrai bisogno, di una tale struttura per scopi di rilevamento del percorso, ad esempio una rete di navigazione. Quindi, supponiamo che possiamo aggiungere un campo per i profumi a quello.

Quindi, cosa mettiamo in quel campo? Propongo un elenco di dischi ( profumo , forza , tempo ). Questo elenco è mantenuto a una lunghezza massima o inferiore e ordinato in base alla forza , in modo da eliminare i profumi deboli. Il profumo potrebbe essere qualcosa di esplicitamente definito per ogni entità o tipo di entità, oppure potrebbe essere semplicemente il tipo di entità, a seconda di ciò che si desidera poter tracciare distintamente. Il tempo è un indicatore temporale di quando questo record di profumo è stato aggiornato l'ultima volta.

Quando un'entità attraversa un'area (ad esempio un dato triangolo della mesh di navigazione), è tempo di aggiornare l'elenco dei profumi. Innanzitutto, diminuisci tutti i punti di forza in base alla quantità di tempo trascorso in base al valore temporale rispetto al tempo corrente: il decadimento esponenziale è probabilmente una scelta ragionevole qui. Quindi aggiungi il profumo dell'entità corrente all'elenco, magari con una forza che dipende dal tipo di entità. Quindi se l'elenco è diventato troppo lungo, scarta la forza più bassa.

Per ottenere un risultato di tracciamento, trova il profumo nell'elenco per la posizione corrente, quindi fai lo stesso per tutti i suoi vicini e vai nella direzione del profumo più forte (non è la direzione da cui proviene il tracker).

Per un realismo extra:

  • Diffusione: trasferisce periodicamente una frazione del profumo in ogni posizione ai suoi vicini. Questo confonde le tracce, ma significa anche che le cose stazionarie possono essere annusate (trovare cibo, cadaveri, ecc.). (È persino una specie riconosciuta di IA per basare le azioni interamente su questo tipo di informazioni: il panorama fornisce informazioni su quale strada andare per ottenere una particolare risorsa, ecc. Dimentico il nome di esso.) Il principale svantaggio è il tempo impiegato calcolo della diffusione ovunque.

  • I profumi forti dovrebbero impedire il rilevamento di profumi deboli; dividere la forza del profumo ricercato per la forza del profumo più forte e fallire se è troppo piccola. Ciò potrebbe consentire di confondere deliberatamente la propria traccia di profumo.


9

Modificherei una tecnica chiamata mappatura dell'influenza per creare una mappa per i profumi. Si dissiperà e si sbiadirà naturalmente, si fonderà e si contenderà con altri profumi e probabilmente di più. Sembra che farà esattamente ciò di cui hai bisogno, ma potrebbe essere più elaborato di quello che stai cercando di implementare. Per lo meno dovrebbe darti alcune buone idee ed è abbastanza semplice da implementare su qualsiasi struttura che stai attualmente utilizzando.

Un tutorial / spiegazione che ho trovato utile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.