evento global double touch

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
Pano
Membro
Messaggi: 80
Iscritto il: 24/03/2013, 19:08
Contatta:

evento global double touch

Messaggio da Pano »

Ciao a tutti,
Nel mio gioco vorrei far si che il giocatore possa mettere in pausa con un doppio click in qualsiasi punto dello schermo. Uso quindi l'evento global double touch in un oggetto dedicato.
Testando su Windows funziona bene ad ogni doppio click del mouse ma creando l'apk e provando su Android funziona molto male e devo premere 4/5 volte molto velocemente affinché funzioni. Cosa devo fare per farlo funzionare correttamente anche su Android / ios?
Grazie

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: evento global double touch

Messaggio da Jak »

Probabilmente il basso framerate ed il ritardo del tuo telefonino a leggere gli input, oppure considerato diversamente tipo uno swipe, potrebbe dare problemi.
Altro motivo è che il mouse si muove molto poco o niente durante un doppio click mentre usando un dito l'area è molto più vasta e cambia moltissimo in base a come lo premi.
Può anche essere che hai uno dei telefoni sfigati su cui non funziona bene.
Dubito che un'evento così specifico si possa fare un work around (una googlata comunque non guasta), probabilmente la soluzione migliore è quella di farti l'evento a mano usando una isteresi (una soglia entro il quale viene considerato buono il valore).
Sull'evento mouse click singolo fai partire un'alarm memorizzando anche informazioni di posizione, sullo stesso evento controllerai se l'alarm è ancora in corso dal click precedente e se il mouse non si è spostato di troppo, ti ci vorrà del tempo per tarare bene queste cose e la situazione si complica nel caso di multitouch.
Ecco un po di pseudocodice da interpretare visto che ricordo poco GM:
Global Click Mouse

Codice: Seleziona tutto

if (cliccato == false)  //mai stato premuto prima d'ora o premuto molto tempo fa
{
	cliccato = true;
	mx_vecchio = mouse_x;		//Memorizza la attuale posizione X del mouse/dito
	my_vecchio = mouse_y;		//Memorizza la attuale posizione Y del mouse/dito
	Alarm0 = 60;	//60 step = un secondo... di solito. Controlla la room speed.
}
else // doppio click!!!
{
	if ( abs(mx_vecchio - mouse_x) < 30 && abs(my_vecchio - mouse_y) < 30)  //controlla che il nuovo click sia entro 30 pixel dal precedente, sottraendo vecchia e nuova posizione e calcolando il valore assoluto
	{
		cliccato = false;	//Resetta il doppio click
		
		//esegui codice del doppio click qui
		
	}
}
Alarm0

Codice: Seleziona tutto

cliccato = false;	//Resetta il doppio click
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Rispondi

Chi c’è in linea

Visitano il forum: Bing [Bot] e 146 ospiti