Creare una AI per creare degli animali

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Vallo92 »

Blacksoul ha scritto:però quando salta,lo fa all'ultimo secondo e toccando il blocco ci si "blocca dentro"!
Come ti ha appena suggerito solid devi aumentare il valore della x nel comando "place_meeting", perché molto probabilmente 4 è troppo poco!
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si

Avatar utente
Simsure
Membro
Messaggi: 223
Iscritto il: 13/09/2013, 21:54
Specialità: Programmazione
Uso: GM:Studio 2
Località: dietro di te...
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Simsure »

Si praticamente bastava aumentare la x

Solamente che devo stare attento a come creo la mappa perche se faccio uan cosa alta 2 blocchi lui saltando il primo resta incastrato nel secondo dato che lo tocca


Inoltre la domanda principale del topic era come creare una AI per degli animali,e ora che sanno saltare il problema maggiore è farli muovere in modo naturale.
Inoltre mi chiedevo se ci fosse un modo per far stare delle istanze uguali vicine tra di loro.

cioè si muovono in modo random però se si allontanano troppo si riavvicinano.

-per la prima cosa sono un pò in dubbio,potrei mettere un timer che ogni volta quando arriva a 0 si resetta e o fa muovere l'animale verso destra o verso sinistra oppure stà fermo

-per la seconda invece credo basti mettere che

Se obj_animale è troppo lontano da obj_animale allora cambia direzione
Immagine
Spoiler
Immagine

Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Vallo92 »

Blacksoul ha scritto: -per la prima cosa sono un pò in dubbio,potrei mettere un timer che ogni volta quando arriva a 0 si resetta e o fa muovere l'animale verso destra o verso sinistra oppure stà fermo

-per la seconda invece credo basti mettere che

Se obj_animale è troppo lontano da obj_animale allora cambia direzione
Esatto. Puoi fare tranquillamente come hai appena detto... Dovrebbe funzionarti senza problemi.
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si

Avatar utente
Simsure
Membro
Messaggi: 223
Iscritto il: 13/09/2013, 21:54
Specialità: Programmazione
Uso: GM:Studio 2
Località: dietro di te...
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Simsure »

questo dovrebbe funzionare lo provo

Codice: Seleziona tutto

if distance_to_object(character)>0 && <50
EDIT:
piu o meno funziona l'ho modificato per le mie esigenze

Però è ancora un problema il fatto che quando saltano cose troppo alte tipo di due blocchi ci si incastrano dentro!

Poi posso fare una cosa del tipo se stai eseguendo questa cosa allora ignora le altre?

perche gli animali si muovono a caso a destra o sinistra e ogni tot secondi o cambiano direzione o stanno fermi

Il problema è che quando saltano il timer che attiva questa cosa può arrivare a 0 e quindi fargli fare cose strane
come posso far si che quando incontrano un blocco e quindi saltano ignorano se il timer arriva a 0? però il timer deve comunque resettarsi per far continuare i movimenti una volta tornati a terra
Immagine
Spoiler
Immagine

Avatar utente
pacmino
GMI Guru
Messaggi: 2569
Iscritto il: 03/06/2009, 16:38
Specialità: Scazzato cronico
Uso: GM:Studio 2
Località: Seconda stella a destra questo è il cammino e poi dritto, fino al mattino...
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da pacmino »

magari potresti dire al timer che quando la vspeed è diversa da 0 e quindi c'è il salto non faccia fare il cambio di direzione ma solo ripartire il timer mentre quando la vspeed è 0 fai il normale cambio di direzione e il reset del timer
Immagine

Avatar utente
Simsure
Membro
Messaggi: 223
Iscritto il: 13/09/2013, 21:54
Specialità: Programmazione
Uso: GM:Studio 2
Località: dietro di te...
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Simsure »

Ho fatto una cosa del genere ma non sembra funzionare,anche se metto >0

Codice: Seleziona tutto

if vspeed>=1

alarm[0]=40

else
direction = round(random(360))
alarm[0]=40

Immagine
Spoiler
Immagine

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da gameplay_extreme »

Solid Snake ha scritto:Ho solo aggiunto che se non è solido non doveva usare contact...
allora avresti dovuto scrivere "move_outside_all" e NON "move_outside_solid" (poiché quest'ultimo prende in cosiderazione solo oggetti solidi)
Blacksoul ha scritto:Si i blocchi che devono saltare sono gli stessi che compongono il terreno (li ho cambiati in obj_erba ma sono uguali cambia solo la texture
e sono solidi
Blacksoul ha scritto:colliscion con obj_erba

Codice: Seleziona tutto

    vspeed = 0
    move_outside_all(direction-180,-1)

che metta _all oppure _solid è uguale
lo so...ti avevo detto che questo codice funziona correttamente SOLO con istanze NON solide, tu devi usare (se vuoi lavorare con oggetti solidi)

Codice: Seleziona tutto

move_contact_solid(direction,-1)
vspeed = 0
praticamente nel TUO CASO (oggetti solidi) usare move_outside_... e come non scriverlo: tale comando non avrà nessun effetto, come ho spiegato in un post precedente...
gameplay_extreme ha scritto:se un
1) oggetto è solido
2) esiste un evento collisione con esso
quando c'è collisione viene automaticamente eseguito il salto alle coordinate precedenti la collisione per cui l'oggetto è già uscito (prima ancora di eseguire le istruzioni dell'evento)...
Blacksoul ha scritto:if vspeed>=1

alarm[0]=40

else
direction = round(random(360))
alarm[0]=40
"vspeed diverso da zero" si scrive "vspeed != 0"
Comunque non hai detto in che evento hai messo questo code e francamente non ne capisco il senso: perché sottoporre a condizione l'istruzione "alarm[0]=40" se poi tanto la esegui comunque? (vedi ulitma riga codice).
dubbio: forse non hai capito: l'ultima istruzione viene eseguita SEMPRE, NON è sottoposta a else...
in oltre non ho ancora capito, vuoi creare un sistema tuo o vuoi basarti sul sistema che ti avevo postato io all'inizio? perchè in quel sistema e previsto che si usi SOLO vspeed (per il salto appunto) e NON hspeed (per lo spostamento orizzontale è usato un incremento o decremento della variabile x).
In oltre

Codice: Seleziona tutto

direction = round(random(360))
che vuol dire?, questi persoanggi non erano in un mondo laterale in cui potevano spostarsi solo a destra o a sinistra e saltare ? con quel code li fai spostare in QUALUNQUE direzione...
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da gameplay_extreme »

@pacmino:
non ho capito: nel tuo esempio prima inizializzi una var dir e che poi non è sfruttata in alcun modo...

volevo in oltre farti notare un piccolo dettaglio: se osservi attentamente quando il personaggio del tuo esempio atterra frena alcuni pixel prima di impattare. Era appunto per evitare questo effetto che nel codice che gli avevo dato io c'era move_contact_solid prima di vspeed = 0.
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
pacmino
GMI Guru
Messaggi: 2569
Iscritto il: 03/06/2009, 16:38
Specialità: Scazzato cronico
Uso: GM:Studio 2
Località: Seconda stella a destra questo è il cammino e poi dritto, fino al mattino...
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da pacmino »

dir doveva essere direction, non mi ero accorto che l'autocompletamento non era avvenuto

in effetti non serve impostare la variabile direction nell'esempio in questione perchè quando metti speed=4 va verso destra automaticamente
Immagine

Avatar utente
Simsure
Membro
Messaggi: 223
Iscritto il: 13/09/2013, 21:54
Specialità: Programmazione
Uso: GM:Studio 2
Località: dietro di te...
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Simsure »

CAVOLO CHE MACELOOOOO!!!

volevo solo un codice che facesse muovere i miei animali a destra e a sinistra che li facesse cambiare direzione o fermare ogni tanto e che gli facesse saltare correttamente i blocchi non mi sembrava il problema piu grave per un gioco!!!!
:piagne: :piagne: :piagne: :piagne: :piagne: :piagne: :piagne: :piagne:
Immagine
Spoiler
Immagine

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Homunculus »

Blacksoul ha scritto:CAVOLO CHE MACELOOOOO!!!

volevo solo un codice che facesse muovere i miei animali a destra e a sinistra che li facesse cambiare direzione o fermare ogni tanto e che gli facesse saltare correttamente i blocchi non mi sembrava il problema piu grave per un gioco!!!!
:piagne: :piagne: :piagne: :piagne: :piagne: :piagne: :piagne: :piagne:
In effetti non lo considererei un problema grave, lo diventa (come tutto d'altronde) se non ci sono le conoscenze necessarie per svilupparlo. Perché il problema sta tutto li, sono piuttosto sicuro che gameplay_extreme e gli altri che ti hanno aiutato lo sappiano risolvere senza troppi problemi, ma già é nettamente più complicato scrivere codice in un forum senza provarlo su GM, se poi dall'altra parte questo codice non viene compreso, allora, come dici tu, é un macello.
Secondo me ti conviene fermarti un attimo, studiarti con l'aiuto del manuale tutto quello che é stato fatto finora e CAPIRE perché é stato fatto in un determinato modo, per poi rivedere il tutto usando la tua testa e le tue nuove conoscenze.

Avatar utente
Simsure
Membro
Messaggi: 223
Iscritto il: 13/09/2013, 21:54
Specialità: Programmazione
Uso: GM:Studio 2
Località: dietro di te...
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Simsure »

Ho ripostato qui poiche mi sembra un problema piu inerente alle AI

Quando obj_mostro collide con obj_muro (come ho detto in un mio altro topic) esegue delle animazioni
cioè diventa obj_mostro_esce
e poi obj_mostro_attacca

terminata la seconda animazione per far si che si aspettasse un pò e poi il mostro tornasse allo sprite originale o messo in CREATE un alarm settato a 90 e poi su ALARM questo codice

Codice: Seleziona tutto

if sprite_index=spr_mostro_attacca_dx || sprite_index=spr_mostro_attacca_sx

{
 if sprite_index=spr_mostro_attacca_dx
  {
  obj_graboid.x=x-90;
  sprite_index=spr_mostro_dx
  image_speed=0.2
  direction=180
  alarm[0]=90
  }
  
  
  if sprite_index=spr_mostro_attacca_sx
  {
  obj_graboid.x=x+90;
  sprite_index=spr_mostro_sx
  image_speed=0.2
  direction=0
  alarm[0]=90
  }
  }
  
  else
  
  alarm[0]=90
quindi se gli sprite sono spr_mostro_attacca_dx o spr_mostro_attacca_sx e quindi se sbatte contro obj_muro da destra o da sinistra dovrebbe tornare indietro di qualche casella e tornare come era inizialmente.

Se colpisce obj_muro muovendosi verso destra funziona tutto correttamente,ma se lo fa verso sinistra una volta terminata l'animazione spr_mostro_attacca invece di tornare indietro,si muove di qualche passo in avanti e ripete l'animazione all'infinito(probabilmente perche va ad attaccarsi all'obj_muro)

Ho provato in vari modi:vedendo si si trattava dello sprite fatto in un certo modo,se sulla mappa obj_mostro è selezionato in delete underling)
ma niente sapete dirmi se il codice che ho usato è giusto?


EDIT:

Ho trovato l'errore ma non me lo spiego proprio!
Per far si che lo sprite si giri se è a destra o se è a sinistra mi è stato consigliato questo codice in STEP

Codice: Seleziona tutto

if (hspeed != 0)
  if hspeed > 0
    {image_xscale = 1}
  else
    {image_xscale = -1}
Ho provato ad eliminarlo e tutto funzionava correttamente!!
Però quel codice mi serve quindi ho provato a modificarlo cosi

Codice: Seleziona tutto

if (hspeed != 0 && sprite_index=spr_mostro_dx)
  if hspeed > 0
    {image_xscale = 1}
  else
    {image_xscale = -1}
In questo modo avrebbe avuto effetto solo se lo sprite fosse stato quello base,ma mettendolo in questo modo si è ripresentato il problema di prima!
è gia la seconda volta che succede a causa del codice per far girare lo sprite!
Ultima modifica di Simsure il 30/10/2013, 20:57, modificato 1 volta in totale.
Immagine
Spoiler
Immagine

Avatar utente
Simsure
Membro
Messaggi: 223
Iscritto il: 13/09/2013, 21:54
Specialità: Programmazione
Uso: GM:Studio 2
Località: dietro di te...
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Simsure »

Ok devo ammettere che ultimamente posto dei problemi che poco dopo ragionandoci riesco a risolvere da solo.

Però per questo mi serve veramente una mano,vi supplico :piagne:

il gioco in questione è in 2d e oggetto mostro non salta ma si sposta solo a destra e sinistra

Quando oggetto eroe collide con terreno crea nella sua stessa posizione oggetto suono, suono è impostato in modo che dopo 1 secondo scompaia.

oggetto mostro vorrei che seguisse e si dirigesse su oggetto suono e quindi in contro a eroe,ho cercato diversi metodi di far seguire ad un' oggetto un'altro oggetto ma anche provandoli e modificandoli non funzionavano,oppure funzionavano male cioè che pur seguendo oggetto suono oggetto mostro si muoveva verso l'alto o in obliquo quando il mio gioco dovrebbe essere solo in 2d.

Sapete come risolvere? oppure un'altro modo di far seguire oggetto eroe a oggetto mostro solo se collide con oggetto terra?
Perche anche se per esempio oggetto eroe si stacca dal terreno saltando o salendo su un'altro oggetto il mostro dovrebbe comunque essersi accorto di lui e quindi seguirlo!
Immagine
Spoiler
Immagine

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da gameplay_extreme »

non so se ho capito...se vuoi che il mostro avvicini la sua x il più possibile alla x del mostro:
metti in step event del mostro

Codice: Seleziona tutto

ii = instance_nearest(x, y, obj_souno) //cerchiamo l'oggetto suono più vicino
if (ii != noone) //se un oggetto è stato trovato
 {
   if ((ii.x != x) // se l'oggetto non è stato ancora raggiunto dal mostro
    {
      if (ii.x > x) // se l'eroe si trova più a destra del msotro
       {
         x += 5 // movimento verso destra
       }
      else // altrimenti
       {
        x -= 5 //movimento verso sisnitra
       }
     if  (abs(ii.x-x) < 10 //quando i 2 oggetti sono molto vicini 
       {
         x = ii.x //le x vengono sovrapposte perfettamente
       }
    }
 }
però questo codice funziona solo se l'oggetto suono esiste per tutto il periodo dell'inseguimento
in oltre questo codice dice come deve avvenire l'inseguimento orizzontalmente ma non specifica come il mostro deve muoversi verticalmente. Poi c'è anche da gestire il movimento in caso di muro invalicabile (cosa non fatta da questo codice)
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
Simsure
Membro
Messaggi: 223
Iscritto il: 13/09/2013, 21:54
Specialità: Programmazione
Uso: GM:Studio 2
Località: dietro di te...
Contatta:

Re: Creare una AI per creare degli animali

Messaggio da Simsure »

Non è molto adatto,ricapitolo meglio

Vorrei che obj_mostro,quando obj_eroe collide con obj_terreno si muova verso obj_eroe,il mio problema è che non riesco a trovare un codice adatto per far seguire un evento ad un altro e che il mostro non salta ma va solo a destra e sinistra.
Immagine
Spoiler
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 123 ospiti