Prova utilizzando
distance_to_object( object ); , più o meno così, ipotizzando 3 objects :
- MetalDetectorPlayer
- MetalDetectorIndicatore
- MetalDetectorLava
Poi crei uno sprite 64x64 avente una freccia che punta a sinistra e con Origini 32x32.
Ora crea 3 suoi duplicati per un totale di 4 frame con frecce che puntano a sinistra.
quindi ruota il frame n°1 tramite la funzione Trasforma--->Rotate, di circa 8 gradi;
quindi ruota il frame n°3 tramite la funzione Trasforma--->Rotate, di circa
-8 gradi;
object : MetalDetectorIndicatore
Assegnagli lo sprite della freccia .
Quindi scrivi nel suo create :
mentre nel suo Draw :
Codice: Seleziona tutto
draw_sprite(spr_MetalDetector,0,x,y);
draw_sprite_ext(sprite_index,image_single,x,y,1,1,incremento,-1,1);
draw_text(10,10,"MetalDetectorIndicatore incremento : "+string(incremento));
draw_text(10,50,"MetalDetectorPlayer DistanzaMinima : "+string(MetalDetectorPlayer.DistanzaMinima));
draw_text(10,70,"MetalDetectorPlayer DistanzaAttuale : "+string(MetalDetectorPlayer.DistanzaAttuale));
[/section]
object : MetalDetectorPlayer
Nel suo Create :
Codice: Seleziona tutto
image_single=0;
image_speed=0;
DistanzaMinima=360;
DistanzaAttuale=0;
Nel suo Step :
Codice: Seleziona tutto
DistanzaAttuale=distance_to_object( MetalDetectorLava);
if ( DistanzaAttuale < DistanzaMinima ) {
with(MetalDetectorIndicatore){
incremento=+ceil(360-(MetalDetectorPlayer.DistanzaMinima/MetalDetectorPlayer.DistanzaAttuale));
if (incremento==0){ incremento=160; }
if (incremento<300){ image_single=-1; image_speed=ceil(1/(300-incremento));}
else{ image_single=0; image_speed=0; }
}
}
Negli eventi press UP, Left; Right e Down il codice gml per muovere l'object.[/section]
object : MetalDetectorLava per esso non serve nulla tranne assegnargli uno sprite;
INFINE :
Inserisci in una room i tre object e prova, premendo le frecce direzionali a muovere più vicino possibile all' object MetalDetectorLava.... ( non testato con più objects MetalDetectorLava )