He estado leyendo los tutoriales de programación que hay aquí, pero, al ver que no sacaban más del 4 decidí buscar otros tutoriales por internet, no encontré nada con la misma librería pero encontré algo parecido e intenté hacerlo con la librería multiusos SDL, ví este código para dibujar el cursor:
while(1) { WPAD_ScanPads(); u32 pressed = WPAD_ButtonsDown(0); // IR Movement WPAD_IR(0, &ir); if (pressed & WPAD_BUTTON_HOME) { exit(0); } VIDEO_ClearFrameBuffer (rmode, xfb, COLOR_BLACK); DrawBox (ir.x, ir.y, ir.x + 1, ir.y + 1, COLOR_WHITE); VIDEO_WaitVSync(); }
Yo hice este código:
#include <multiusos.h> int main(int argc, char *argv[]){ Init(); screenFontLoad("calibri.ttf", 30); screenFontSetColor(255, 255, 255); while(1){ wpadInitButtons(Wpad1); wpadInitIR(Wpad1); screenClear(COLORBLACK); screenFontPrintf(5, 15, "Probando el cursor"); screenImageLoadinOne(ir.x, ir.y, "cursor.png"); screenFlip(); } return 0; }
Me sale la imagen cursor.png en la esquina tapando la palabra Probando y por más que muevo el wiimote, la imagen no se mueve
Yo estoy más familiarizado
Yo estoy más familiarizado con el programa de arriba que con las multiusos SDL, pero por lo que he podido ver en el .h de estas últimas, aparentemente deberías hacer un WPAD_Scanpads(), para que WPAD actualice los valores del mando. Es posible que ya lo esté haciendo wpadInitIR o wpadInitButtons pero no lo creo.
En cuanto llegue a casa lo probaré y te digo.
Contestando a prephax y por lo que he podido ver de las multiusos, en esta biblioteca existe una variable predefinida que se llama "ir" y que contiene los datos de estado del ir del pad 1, por lo que no es necesario declarar variables nuevas. Esta variable se refresca a cada nueva llamada a wpadInitIR.
Aunque en mi opinión su nombre lleva un poco a confusión, esta función, aparentemente llama a WPAD_IR(ir) actualizando de esta manera dicha variable. Y lo mismo ocurre con wpadInitButtons que asigna las variables predefinidas, "pressed", "presion" y "release".
Por otro lado, si no quieres hartarte de resetear la Wii, te recomiendo que incluyas una línea del tipo "if (pressed & WPAD_BUTTON_HOME) exit;". para poder salir del programa pulsando "Home".
Curso aplicado de GRRLIB - Parte 1 - Parte 2 - Parte 3 - Parte 4 - Parte 5 - Parte 6 - Parte 7 - Parte 8 - Parte 9 - Parte 10 - Parte 11
Profundizando en los mandos de la Wii - Parte 1 - Parte 2 - Parte 3 - Parte 4 (Balanceboard) - Parte 5 (Miis)
Homebrew - WiiTriis - LifemiiWii
wpadInitButtons(Wpad1);
wpadInitButtons(Wpad1); inicia los botones y wpadInitIR(Wpad1); inicia el IR, en cuanto a lo del botón HOME yo lo puso y me devuelve al homebrew channel no me hace falta resetear la wii.
En cuanto a mi problema ya lo he solucionado, resulta que me faltaba el código screenClear(COLORBLACK); que limpia la pantalla, lo he puesto debajo de while(1){ para que limpie la pantalla al principio y después muestre lo que hay debajo sino lo limpiaría y no saldría en la pantalla y me ha funcionado.
Te recomiendo que veas los
Te recomiendo que veas los script de LUA si te interesan. En mi juego "Tribute to Justin" he creado un cursor que es una fotografía de una mano en png con transparencia y sí que se mueve. Reconozco que no es C pero va fluido aunque sea interpretado y es muy cómodo.
Otra cosa: yo no entiendo de C pero creo que deberías tener dos variables para cargar los valores de x e y del mando IR a través de una función y refrescarlos periódicamente ¿no?. Por la posición parece que se te quedan clavados en (0,0) y no se refrescan al mover el mando.
Un saludo.