Lancetta metal detector

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
funkygallo
Membro attivo
Messaggi: 256
Iscritto il: 01/04/2014, 23:43
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Lancetta metal detector

Messaggio da funkygallo »

Ciao,
volevo implementare un metal detector con la lancetta che oscilla leggermente.
Ora ho un semplice alarm che mi fa incrementare la posizone della freccia (tipo orologio) una volta al secondo, richiamando se stesso.

Avete idea di come possa implementare l'oscillazione della freccia?

Codice: Seleziona tutto

alarm[0]
tempo_md += 0.8;
alarm[0] = 60;

step event
incremento= -(inizio_md + tempo_md); //inizio_md è la posizione di partenza

draw event
    draw_sprite_ext(spr_geiger_arrow, 0, x, y, 1, 1, incremento, c_white, 1);

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: Lancetta metal detector

Messaggio da civic71 »

Potresti aggiungere al codice sopra , più frame allo sprite della lancetta, ottenendo un animazione della sua oscillazione . Questa , verrebbe poi animata , solo nel momento desiderato.

Ma un metal detector punta la freccia nella direzione del metallo più vicino . Quindi io opterei anche per utilizzare "point_direction x, y, obj_metallo.x, obj_metallo.y " ottenendo l'angolo di rotazione . Da qui ruoterei lo sprite (lasciando image_single=0; ) raggiungendo quel angolo , per poi animare lo sprite della lancetta per pochi secondi, con image_single=-1; diminuendo progressivamente la sua image_speed; Per poi....

Avatar utente
funkygallo
Membro attivo
Messaggi: 256
Iscritto il: 01/04/2014, 23:43
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Lancetta metal detector

Messaggio da funkygallo »

Ciao,
grazie per la risposta, ma va ben oltre quello che ho in mente.
Nel senso che il player non ha un metal detector in mano, ma l'indicatore è nella GUI.
L'idea è che quando si avvicina ad un qualcosa di radioattivo (stabilito tipo lava = 4, cespugli = 6, alberi = 1), l'indicatore sale (la freccia insomma) oscillando copiosamente.
Se il player si allontana invece, la freccia ritorna indietro.

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: Lancetta metal detector

Messaggio da civic71 »

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 :

Codice: Seleziona tutto

image_single=0;
image_speed=0;
incremento=0;
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 )

ZerA78
Membro super
Messaggi: 516
Iscritto il: 01/01/2013, 16:00
Specialità: Idee
Contatta:

Re: Lancetta metal detector

Messaggio da ZerA78 »

Meno male qualcuno che lavora ad un progetto!! Sta community e' semideserta! :(
In bocca al lupo Funky!!
Immagine

Avatar utente
funkygallo
Membro attivo
Messaggi: 256
Iscritto il: 01/04/2014, 23:43
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Lancetta metal detector

Messaggio da funkygallo »

mmm forse hai ragione, qualcuno si sarà stancato, qualcun altro è passato ad altri engine che sono praticamente gratis (unity, unreal).
Alla fine con gm paghi tutto e soprattutto se vuoi andare su console ora costa un botto.

Inoltre ha avuto diversi bug per ios e android che ne hanno scoraggiato l'uso.

Forse qualcosa sta cambiando.. ho visto dal bug tracker che 3 giorni fa hanno fixxato un bug nel runner html5 risalente al 2015 e anche un bug del 2014!


Questo comunque il risultato che ho ottenuto
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 22 ospiti