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.
Ti linko anche il manuale per quanto riguarda image_xscale (
clicca qui), nella descrizione parla anche dello scalare a -1.