Anuncios Google

como hice un teclado semicircular.

Para grabar la puntuación alta en un juego podemos optar por varias opciones, entre ellas utilizar el keyboard, o escribir con el stylus tu nombre utilizando el metodo de escritura.

Yo estaba buscando un metodo diferente aunque no original, por que lo habia visto en algunos juegos, y se trataba de tener las letras en una disposición diferente a lo normal. Yo obté por poner las letras en forma de semicirculo. Así (ver grabar.png), aunque este metodo puede servir para posicionarlos segun la función que tu quieras.

Para ello me estuve peleando para poder poner las letras en vez de en tiles en posiciones de pixels, cosa que, me fue imposible, no encontré ninguna función o mecanismo en PAlib que me permitiera hacer eso. Otra opción que tenía era cargar cada caracter como un sprite, pero lo descarté por que ya en el juego utilizaba casi todo el mapa de sprites y no queria empezar a borrar y crear nuevos sprites.

Finalmente, lo que pensé que era mejor era hacer una función para calcular 30 posiciones, para 28 letras y los extremos, al final fueron 36 posiciones porque en los extremos del semicirculo estaban muy juntas y sobreescribia al pulsar sobre una de ellas, entonces añadí más posiciones pero despreciando los extremos. El bucle que utilicé para calcular las posiciones de las letras es:

    for(j=0;j<72;j+=2)                                     //36 posiciones (x,y)
    {
        coordenadas[j] = 256+ PA_Cos(i)>>1;     //da posiciones x,y
        coordenadas[j+1] = 96+ PA_Sin(i)>>1;       
        i+=7;                                                   //256(anchopantalla)/36(caracteres a mostrar)
    }

Luego hice la parte pesada, con el paint puse cada letra en la posición (x,y) de coordenadas dejando 3 vacios por cada lado para no solapar caracteres. Así A B C...etc... Cuando al final acabé, tuve que comprobar la deteccion de la posición para unos 12 pixels hacia abajo y hacia la derecha (mas o menos el ancho y alto de cada letra que escribí en el paint). De esta manera:

PA_StylusInZone(coordenadas[i],coordenadas[i+1], coordenadas[i]+12, coordenadas[i+1]+12);

Al detectar cada posición debía asignar la letra correspondiente:

     char letras[36]="0000ZYXWVUTSRQPOÑNMLKJIHGFEDCBA8200";      // 0-ni caso, 8-borrado, 2-fin

Finalmente a cada pulsación iba añadiendo cada caracter al nombre.

     sprintf(nombre,"%s%c",nombre,(char)letras[j/2]);   //concatena la letra

En el main.c teneis el codigo completo por si quereis mirarlo y si teneis dudas solo decidlo.

Comentar un par de fallos, que si alguien puede corregirlos le agradeceré. ¿Como borrar solo un caracter? y otro menos importante ¿como evitar la escritura de dos caracteres en algunas posiciones?

Saludos.

 

 

 

4.35484
Tu voto: Ninguno Votos totales: 4.4 (31 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de carlo999

Esto esta mu bn

Esto esta muy bien, y por ejemplo podrias usarlo para la seleccion de nombre en un juego, ;)

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.