[iOS CODE] El mouse, un enemigo en la sombra..

Started by Erkosone, February 12, 2012, 01:04:48 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Erkosone


Ejemplo de código para trabajar con un simple puntero del mouse en el touch screen de un iPhone, iPad o similar.


A tener en cuenta:
- Si el SIZE es cero no se produce colisión, entonces vamos a aprovecharnos de este fenómeno para usarlo en nuestros códigos.
- Si la variable GLOBAL iOS_Release está en 'FALSE' este código actuará como un puntero de mouse normal, esto es útil mientras diseñamos la aplicación, al finalizarla dejar iOS_Release = TRUE.
- El puntero del mouse en un touch Screen se situará justo en el centro de la llema del dedo que toca la pantalla, quedando por debajo de donde en realidad queremos tocar, esto se tiene en cuenta en este código creando un gráfico rectangular con color solo en la mitad superior del mismo, probocando así las colisiones por encima de la posición real de incisión en pantalla.
- Se tiene en cuenta que, una vez se toca la pantalla, en ese preciso instante de tiempo no se puede comprobar la colisión, sino que hay que dejar pasar un frame, esto es así por que el cursor estará en la "última posición tocada" y no queremos que se produzca de nuevo una colisión en esa posición, sino en la posición actual, dejaremos pasar un FRAME antes de comprobar la colisión.


Espero os sirva de ayuda, y os haga perder menos tiempo que si teneis que ir descubriendo esto por vosotros mismos poco a poco..


Todo esto suponiendo que finalmente el mouse sea vinculado al touchScreen, que es lo más sencillo si no se requiere multitouch.  ;)


Variables GLOBAL necesarias: 'INT iOS_Release' 'INT G_Mouse' 'ID_Mouse'.


Código del proceso 'Raton()':

process raton();
begin
   if(ios_release==true)
      alpha=0;
         else
            alpha=255;
   end
   id_mouse=id;
   file=0;
   graph=G_Mouse;
   z=mouse.z;
   loop
      if(ios_release==true)
         if(!mouse.left)
            size=0;
               else
                  size=100;
         end
      end
      x=mouse.x;
      y=mouse.y;
      frame;
   end
end





# Método para comprobar colisión con el mouse ahora es:    if( collision( ID_Mouse ) )......;End
#G_Mouse debe ser un gráfico de 15x25, con color en la mitad superiór del mismo, la mitad inferor del gráfico ha de estár transparente.


SplinterGU

gracias erkosone, pero no entiendo mucho, yo siempre que uso los tactiles, espero que el centro del puntero del mouse este en el centro de la yema del dedo... si quiero que sea con la punta de la uña, toco con la uña y no con la yema del dedo.

para mi es natural eso, pero tu dices que con esto lo cambias y ahora tocas con la yema y apunta con la uña?

eso no me parece muy natural, pero seguro lo entendi mal.

podrias explicarlo un poco mejor?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

#2
Si mira, parte de culpa es por que el iPhone / iPad poseen pantallas capacitivas, sobre las que no hay que realizar ninguna presión y sobre las que imperativamente hay que trabajar con objetos que poseen capacidad, en este caso, el dedo, siendo inservibles para punteros tipo Stylus como las difundidas pantallas que suelen portar los dispositivos Android.


La teoría dice que una pantalla capacitiva proporciona una experiencia de uso mayor y mejor que una del tipo resistiva (Android disp.) pero en verdad lo que nadie dice es que al tocarlas, el puntero real se situa en el centro del area que componen todos los pixels que reciben contacto con un objeto capacitivo "el dedo", y esto en la practica deriva en un curioso mal comportamiento, simplemente con compilar para iOS un simple ejemplo con varios botones pequeños y juntos se puede ver que el puntero del mouse no está donde realmente queremos pulsar, hay que aplicarle una pequeña corrección por que al tocar la pantalla se queda algo por debajo de lo supuestamente deseado.


Esto no es un bug ni nada similar de bennugd, es por el tipo de pantalla, en android no lo he probado, pero estoy seguro de que esto no sucede "por que se puede usar un Stylus".


Es algo que descubrí al programar el sequenciador de música que tenemos en la app Store, por cierto, programado con BennuGD, y resulta que en pantalla hay botones de un tamaño muy pequeño y era casi imposible controlar bien los botones, siempre se clickava el de la fila inferior, esto con botones mas grandes es imperceptible, pero ya digo que es una corrección para casos donde sea necesaria precisión "en dispositivos iOS".


La verdad es que se trata de algo realmente curioso, pero me dio tantos problemas el tema de los mini botones que finalmente probé esto y funcionó muy bien ;)


EDITO:  También tengo que decir que tengo los dedos como morcillas XD.. esto también tiene algo de culpa..

KeoH

pues esta informacion nos servirá para RATS. Gracias :)

hardyx

#4
Me parece muy raro lo que comentas. En el iPhone y otros dispositivos capacitivos (también muchos Android), los botones son grandes del tamaño de la yema del dedo, porque vas a pulsar encima. No señalas arriba del dedo, sino que pulsas el elemento bajo el dedo, con lo cual es normal que de el centro del área pulsada.

josebita

Por lo que he podido leer, iOS "modifica" un poco el punto en el que tocas de forma cuando tocas la pantalla el sistema identifica que has tocado algo por encima de donde la pantalla lo ha detectado. Decía que era así porque como el dedo es "gordo" en realidad el usuario tiende a tocar por debajo de donde en realidad quiere hacerlo.

Estoy bastante seguro de haberlo leído pero no sabría decir dónde...

Erkosone

A las pruebas me remito, compilad un programa con botones de 27x19 pixels y haced la prueba vosotros mismos, está claro que esto es algo que me ha sucedido por el tipo de aplicación que he desarrollado, una Screen para comprender mejor el asunto:

SplinterGU

Quote from: Erkosone on February 12, 2012, 04:53:24 PM
Si mira, parte de culpa es por que el iPhone / iPad poseen pantallas capacitivas, sobre las que no hay que realizar ninguna presión y sobre las que imperativamente hay que trabajar con objetos que poseen capacidad, en este caso, el dedo, siendo inservibles para punteros tipo Stylus como las difundidas pantallas que suelen portar los dispositivos Android.


La teoría dice que una pantalla capacitiva proporciona una experiencia de uso mayor y mejor que una del tipo resistiva (Android disp.) pero en verdad lo que nadie dice es que al tocarlas, el puntero real se situa en el centro del area que componen todos los pixels que reciben contacto con un objeto capacitivo "el dedo", y esto en la practica deriva en un curioso mal comportamiento, simplemente con compilar para iOS un simple ejemplo con varios botones pequeños y juntos se puede ver que el puntero del mouse no está donde realmente queremos pulsar, hay que aplicarle una pequeña corrección por que al tocar la pantalla se queda algo por debajo de lo supuestamente deseado.


Esto no es un bug ni nada similar de bennugd, es por el tipo de pantalla, en android no lo he probado, pero estoy seguro de que esto no sucede "por que se puede usar un Stylus".


Es algo que descubrí al programar el sequenciador de música que tenemos en la app Store, por cierto, programado con BennuGD, y resulta que en pantalla hay botones de un tamaño muy pequeño y era casi imposible controlar bien los botones, siempre se clickava el de la fila inferior, esto con botones mas grandes es imperceptible, pero ya digo que es una corrección para casos donde sea necesaria precisión "en dispositivos iOS".


La verdad es que se trata de algo realmente curioso, pero me dio tantos problemas el tema de los mini botones que finalmente probé esto y funcionó muy bien ;)


EDITO:  También tengo que decir que tengo los dedos como morcillas XD.. esto también tiene algo de culpa..

Como dice Hardyx, asi tambien funciona en Android (probado en muchos dispositivos android), como tambien sucede en mi nokia tactil, y como sucede en el telefono chino de mi señora, y como imagino sucede en todos los tactiles, o sea, tu tocas, pero el centro de tu dedo (u el objeto que sea), es el punto caliente de presion y el puntero, para mi es lo natural.

cuidado con eso, porque si es como entiendo que es, puedes tener un problema con los usuarios acostumbrados a usar tactiles.

tambien puede que no te siga entendiendo.

joseba, segun entiendo, lo que dice Erkosone, es lo contrario a lo que tu dices, entiendo que dice que cuando pulsas la pantalla el centro de tu dedo es el punto donde se ubica el mouse, tu estas diciendo que se ubica encima, pero es lo contrario.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: Erkosone on February 13, 2012, 03:01:12 PM
A las pruebas me remito, compilad un programa con botones de 27x19 pixels y haced la prueba vosotros mismos, está claro que esto es algo que me ha sucedido por el tipo de aplicación que he desarrollado, una Screen para comprender mejor el asunto:


me parece que el problema es que siendo los botones tan chicos, vos queres que al pulsar ver que estas pulsando, por eso queres que la punta de tu uña señale el boton que quieres pulsar... corrijeme si estoy equivocado... esa es la razon de tu parche.

pero por otro lado, no es un comportamiento extraño ni molesto el que dices que se centra, es el comportamiento normal.

yo creo que es cosa de adaptacion, tambien es raro eso de que una pantalla capacitiva no acepta punteros, que solo va con dedos... me quiero matar, le compre un nuevo celular capacitivo a mi señora, si llega y es asi, quizas va a tener algunos problemas, y justamente le compre uno nuevo por problemas de tactil con el celular demasiado economico que le habia comprado.

por otro lado, no se si te lo dije, pero que lindo se ve tu secuenciador!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

Gracias, si, está chulo jeje, hasta nos lo han pirateado.. y corre por ahi de forma ilegal XD.. no es broma..


- El tema  es que te invito a que lo pruebes tu mismo con algún programa y botones pequeños, el parche que subimos para la aplicación fue esto mismo y fué por el feedback de los usuarios, que se quejaron de esto mismo, al principio era tal cual sin corrección, pero todo el mundo se quejó..

SplinterGU

entiendo, te doy el karma que no te di, porque lo veo mas como un parche/solucion a un problema de apuntar con la punta del dedo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

hardyx

#11
Quote from: SplinterGU on February 13, 2012, 03:09:29 PM
yo creo que es cosa de adaptacion, tambien es raro eso de que una pantalla capacitiva no acepta punteros, que solo va con dedos... me quiero matar, le compre un nuevo celular capacitivo a mi señora, si llega y es asi, quizas va a tener algunos problemas, y justamente le compre uno nuevo por problemas de tactil con el celular demasiado economico que le habia comprado.
Las pantallas capacitivas no soportan stylus, pero aún así son más precisas y soportan multitouch. En las resistivas tienes que hacer más fuerza para que detecte presión. Creo que van por electricidad estática las capacitivas, por eso funcionan con una leve presión.

Por cierto, tiene buena pinta ese programa de música en Bennu, Erkosone.

Erkosone

Gracias HardyX, la verdad es que te puedes entretener un buen rato con el jeje, está simpático si.  :)

SplinterGU

en serio las capacitivas son mas sensibles que las resisitivas??? :( me estoy arrepentiendo, yo los dispositivos resistivos que tengo, no tengo que hacer fuerza para nada... y esto si es mas sensible se va a mover de nada... :(

puf, vaya mierda! ya estoy deprimido tire dinero como siempre.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

hardyx

#14
Quote from: SplinterGU on February 13, 2012, 11:48:02 PM
en serio las capacitivas son mas sensibles que las resisitivas??? :( me estoy arrepentiendo, yo los dispositivos resistivos que tengo, no tengo que hacer fuerza para nada... y esto si es mas sensible se va a mover de nada... :(

puf, vaya mierda! ya estoy deprimido tire dinero como siempre.
Los móviles modernos de gama media/alta tienen pantalla capacitiva, da mejor respuesta y permite gestos con uno o varios dedos (giros, zoom, etc). Eso si, los botones tienen que ser de 0.5x0.5 cm mínimo, pero se pueden pulsar. También hay stylus para capacitivas, pero son especiales con punta de goma. Pero no son necesarios, a no ser que tengas los dedos como chorizos :D