Aiuto non riesco a far girare il nemico

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Gio205
Newbie
Messaggi: 4
Iscritto il: 14/01/2019, 13:59
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Aiuto non riesco a far girare il nemico

Messaggio da Gio205 »

Ciao a tutti,
Sto cercando di creare un piccolo videogioco all’interno del quale un sub deve raccogliere delle monete e recuperare una bombola di ossigeno per passare al livello successivo. Per il momento non so ancora programmare con GML, perciò sto usando il DnD.

I nemici del sub ovviamente sono gli squali, il mio problema è che vorrei che lo squalo inseguisse il sub e fin qui tutto bene. Ma non riesco a far girare lo squalo quando il mio personaggio va in senso opposto al nemico, cioè se il sub va verso lo squalo tutto ok, ma quando va in senso opposto non lo squalo non gli va incontro di testa, ma gli va incontro con la coda. :NO:

L'ho impostato così:

If Instance Exists:
Object: obj_diving
Not: nessun flag

collegato a:

Set Point Direction:
x: obj_diving.x relative non selezionato
y: obj_diving.y relative non selezionato

collegato a:

Set speed:
Type: Direction
Speed: 2 relative non selezionato

Grazie in anticipo,
Giorgia :-)

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Aiuto non riesco a far girare il nemico

Messaggio da doom13 »

Ciao, prima di tutto di converto quello che hai fatto col DnD in GML, risulta più facile poi fare il resto:

Codice: Seleziona tutto

if (instance_exists(obj_diving))
{
    direction = point_direction(x, y, obj_diving.x, obj_diving.y);
    speed = 2;
}
Come vedi in due righe di gml hai prodotto lo stesso codice del DnD. Ora una domanda importante, hai uno sprite per lo squalo rivolto verso sinistra e uno verso destra?

- Se sì, allora potresti controllare la direzione in cui si sta muovendo lo squalo e settare quindi lo sprite corretto. Puoi farlo in un modo molto semplice verificando che valore contenga la variabile "direction". Ora, però, che valori deve avere "direction" per dire "ok lo squalo sta guardando verso destra (o sinistra)"?
Intanto devi sapere che "direction" contiene sempre un valore tra 0 e 359 compresi, 0 è destra, 90 è su, 180 è sinistra, 270 è giù. Nel tuo caso ti serve sapere solo se lo squalo sta guardando verso destra o sinistra quindi puoi considerare tutti i valori tra 90 e 270 come sinistra e i restanti come destra.
A questo punto ti rimane da settare lo sprite giusto ma è facile visto che ci sono le funzioni (o le icone del DnD) fatti per questo.

Codice: Seleziona tutto

//se la direction contiene un valore minore di 90 e maggiore di 270
//(e quindi lo squalo sta guardando verso destra)
if (direction <= 90 and direction > 270)
{
    //setto lo sprite dell'oggetto con quello dello squalo che guarda a destra
    image_sprite = sprite_squalo_rivolto_destra;
}
//altrimenti
else
{
    //setto lo sprite dell'oggetto con quello dello squalo che guarda a sinistra
    image_sprite = sprite_squalo_rivolto_sinistra;
}
- Se no, è ancora più facile. Ti serve solo lo sprite dello squalo che guarda verso destra, a questo punto usi un piccolo trick scalando lo sprite. Che significa scalare, immagina di avere uno sprite di larghezza 64 pixel, scalandolo orizzontalmente a 1 non cambierà nulla, lo sprite sarà sempre da 64 pixel. Scalandolo orizzontalmente a 0.5, lo sprite sarà ora schiacciato a 32 pixel, scalandolo a 0.25 sarà da 16 pixel e così via. Allo stesso modo se lo scali a 2 sarà da 128 pixel.
Il trucco qui è scalare orizzontalmente a "-1" che equivale a specchiare lo sprite, avrà stesse dimensioni ma sarà specchiato e quindi in questo caso lo squalo sarà rivolto verso sinistra. Per farlo:

Codice: Seleziona tutto

//se la direction contiene un valore minore di 90 e maggiore di 270
//(e quindi lo squalo sta guardando verso destra)
if (direction <= 90 and direction > 270)
{
    //scalo orizzontalmente a 1
    image_xscale = 1;
}
//altrimenti
else
{
    //scalo orizzontalmente a -1 (specchio)
    image_xscale = -1;
}
Ho cercato di spiegare il più possibile e tenermi sul semplice, ovviamente se qualcosa non è chiaro dicci tutto. :cappa:
Ti linko anche il manuale per quanto riguarda image_xscale (clicca qui), nella descrizione parla anche dello scalare a -1.
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Gio205
Newbie
Messaggi: 4
Iscritto il: 14/01/2019, 13:59
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Aiuto non riesco a far girare il nemico

Messaggio da Gio205 »

Ciao,
Intanto grazie per la risposta :-)

No purtroppo non ho uno squalo che guarda dal verso opposto e non ci capisco nulla di GML.
Ho provato ad inserire i codici che mi hai elencato qua sotto ma la situazione non cambia. :spat:
Non riesco a farlo girare, ho provato anche in DnD a inserire il comando:

Set Instance Scale:
Horizontal: -1
Vertical: 1

Ma poi nuota al contrario per tutto il tempo ed ovviamente non è questo il risultato voluto.

Vorrei dargli esattamente questo comando: Quando obj.diving va verso destra obj.sharkenemy deve voltarsi verso destra, mentre quando obj.diving va verso sinistra obj.sharkenemy deve andare verso sinistra (lo sprite già di suo è rivolto verso sinistra). Come lo traduco in GML o in DnD?

Perdonate l'ignoranza, ma ho iniziato da circa un mese e ho ancora molte lacune :confuso:

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Aiuto non riesco a far girare il nemico

Messaggio da doom13 »

Allora, se hai lo sprite rivolto verso sinistra allora lo scale va al contrario, dovrebbe venire una cosa del genere:
Immagine

Chiaramente queste azioni vanno dopo quelle che hai messo tu. :cappa:
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
mirkuto
Membro
Messaggi: 176
Iscritto il: 16/10/2009, 14:29
Specialità: Alla buona
Uso: GameMaker 8
Località: Venere
Contatta:

Re: Aiuto non riesco a far girare il nemico

Messaggio da mirkuto »

Potresti verificare la variabile hspeed ( è una variabile che non va neanche dichiarata nel create event)

con l'icona if VAR scrivi solo hspeed e controlli il valore

if hspeed>0 change sprite con faccia a destra
if hspeed<0 change sprite con faccia sinistra
(richiede 2 sprites quella di destra e sinistra)

oppure puoi usare lo scale come dice doom13 (è sufficiente 1 sola sprite)
Perchè la ragione... perchè con la ragione si sopravvive a tutto... si distrugge il distrutto ricostruendo a intarsi la copia fedele dell'innamorarsi...

Immagine Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 44 ospiti