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
evento global double touch
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: evento global double touch
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
Alarm0
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
}
}
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
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
Chi c’è in linea
Visitano il forum: Bing [Bot] e 146 ospiti