[C]Error al compilar :S

Soy nub en la programacion en C y hoy e echo mi primer "programa" para psp, pero al compilar me salen una serie de errores :S os dejo el codigo a ver si alguien me puede ayudar.

#include <pspsdk.h>
#include <pspkernel.h>
#include <psppower.h>
#include <pspctrl.h>
#include <pspdisplay.h>
#include <pspdebug.h>
 
PSP_MODULE_INFO("Menu", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
 
SceCtrlData currentPad, lastPad;
int opcion = 1;
 
int menu()
{
if(opcion == 1)
{
pspDebugScreenClear();
pspDebugSetTextColor(0xFF0000);
pspDebugScreenPrintf("Opcion 1");
pspDebugSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 2");
pspDebugSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 3");
}
else if(opcion == 2)
{
pspDebugScreenClear();
pspDebugSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 1");
pspDebugSetTextColor(0xFF0000);
pspDebugScreenPrintf("Opcion 2");
pspDebugSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 3");
}
else if(opcion == 3)
{
pspDebugScreenClear();
pspDebugSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 1");
pspDebugSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 2");
pspDebugSetTextColor(0xFF0000);
pspDebugScreenPrintf("Opcion 3");
}  
}
int mov_menu()
{
sceCtrlReadBufferPositive(&currentPad, 1);
 
if( currentPad.Buttons != lastPad.Buttons ) 
{ 
lastPad = currentPad; 
if(currentPad.Buttons & PSP_CTRL_DOWN)
{
opcion = opcion + 1;
}
else if(currentPad.Buttons & PSP_CTRL_DOWN & opcion == 3)
{
opcion = 1;
}
if(currentPad.Buttons & PSP_CTRL_UP)
{
opcion = opcion - 1;
}
else if(currentPad.Buttons & PSP_CTRL_UP & opcion == 1)
{
opcion = 3;
}
}
}
int main()
{
sceCtrlReadBufferPositive(&lastPad, 1);
pspDebugScreenInit();
menu();
mov_menu();
return 0;
}

PD: se supone que es un menu simple, aunque tampoco stoy seguro ni de que ste bien echo :S


Anuncios Google

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.

Ya he solucionado el

Ya he solucionado el problema, aora el menu funciona bien, pero me ha surgido otro problema y es que la pantalla se ve negra (solo cuando le doy a home se ve durante medio segundo las letras, por eso se k funciona :P) Supongo que es por culpa del screenclear pero lo e probado todo i no se como acerlo. Dejo el codigo:

#include <pspsdk.h>
#include <pspkernel.h>
#include <psppower.h>
#include <pspctrl.h>
#include <pspdisplay.h>
#include <pspdebug.h>
 
PSP_MODULE_INFO("Menu", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
int exit_callback(int arg1, int arg2, void *common);
int CallbackThread(SceSize args, void *argp);
int SetupCallbacks(void);
 
/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
sceKernelExitGame();
return 0;
}
 
/* Callback thread */
int CallbackThread(SceSize args, void *argp) {
int cbid;
 
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
 
sceKernelSleepThreadCB();
 
return 0;
}
 
/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void) {
int thid = 0;
 
thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}
 
return thid;
}
 
SceCtrlData currentPad, lastPad;
int opcion = 1;
 
void menu()
{
if(opcion == 1)
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("Opcion 1\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 2\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 3\n");
}
else if(opcion == 2)
{
pspDebugScreenClear();  
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 1\n");
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("Opcion 2\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 3\n");
}
else if(opcion == 3)
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 1\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 2\n");
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("Opcion 3\n");
}  
}
void mov_menu()
{
sceCtrlReadBufferPositive(&currentPad, 1);
if(currentPad.Buttons != lastPad.Buttons) 
{
lastPad = currentPad;
if((currentPad.Buttons & PSP_CTRL_DOWN) && (opcion != 3))
{
opcion = opcion + 1;
}
else if((currentPad.Buttons & PSP_CTRL_DOWN) && (opcion == 3))
{
opcion = 1;
}
if((currentPad.Buttons & PSP_CTRL_UP) && (opcion != 1))
{
opcion = opcion - 1;
}
else if((currentPad.Buttons & PSP_CTRL_UP) && (opcion == 1))
{
opcion = 3;
}
}
}
int main()
{
pspDebugScreenInit();
SetupCallbacks();
while(1)
{
menu();
mov_menu();
}
return 0;
}

Ya se k os estoy dando mucho la lata :P cuando acabe reparto mis escasos scenebitos entre todos los k me habeis ayudado.

Imagen de pspgorrister

Pega los errores que te

Pega los errores que te muestra el compilador

o.O

los puse pero el post se ha borrado o lo han borrado :S Pero la cuestion es k aora ya no m da errores tan solo es que no m funciona el menu (se muestra cuando opcion = 1 pero aunque pulse arriba o abajo no se desplaza por las diferentes opciones)

Imagen de el__QAT

Yo...

Lo he marcado como ofensivo, pues incumplía con la normas (la imagen era muy ancha).

sAlud0s!

Imagen de burnxez

2 cosas

En lugar de usar pspDebugScreenPrintf puedes definirlo al principio si no mal recuerdo se hace así:

#define printf pspDebugScreenPrintf

De esta manera te evitaras escribir pspDebugScreenPrintf y sólo tendrás que escribir printf.

En cuanto a los errores, podrías ponerlos para ayudarte, pues con el PSP no estoy muy familiarizado en cuanto a funciones y demás.

Saludos.

Oks gracias por la

Oks gracias por la sugerencia del Printf, lo aplicare de aora en adelante.

Te dejo una imagen con los errores que me salen:

Imagen de burnxez

pspDebugScreenSetTextColor

Ok, se refiere a que el comando que has puesto no se encuentra definido, lo primero que hay que checar en estos casos es:

  1. ¿Estás incluyendo las librerias correctas?
  2. ¿La sintaxis y parametros de las funciones son correctas?

En tu caso, al parecer se debe a que no has escrito la función correctamente, lo que debes hacer es poner

pspDebugScreenSetTextColor

Te ha faltado Screen al escribir la función.

Espero te funcione.

Saludos.

Oks, k error mas tonto =P

Oks, k error mas tonto =P gracias, habia algunos errores mas pero ya los e arreglado. aora el problema es k al pulsar arriba i abajo no me desplazo por el menu :S

Codigo arreglado:

#include <pspsdk.h>
#include <pspkernel.h>
#include <psppower.h>
#include <pspctrl.h>
#include <pspdisplay.h>
#include <pspdebug.h>
 
PSP_MODULE_INFO("Menu", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
 
SceCtrlData currentPad, lastPad;
int opcion = 1;
 
void menu()
{
if(opcion == 1)
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("Opcion 1\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 2\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 3\n");
}
else if(opcion == 2)
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 1\n");
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("Opcion 2\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 3\n");
}
else if(opcion == 3)
{
pspDebugScreenClear();
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 1\n");
pspDebugScreenSetTextColor(0xFFFFFF);
pspDebugScreenPrintf("Opcion 2\n");
pspDebugScreenSetTextColor(0xFF0000);
pspDebugScreenPrintf("Opcion 3\n");
}  
}
void mov_menu()
{
sceCtrlReadBufferPositive(&currentPad, 1);
 
if( currentPad.Buttons != lastPad.Buttons ) 
{ 
lastPad = currentPad; 
if(currentPad.Buttons & PSP_CTRL_DOWN)
{
opcion = opcion + 1;
}
else if(currentPad.Buttons && PSP_CTRL_DOWN && opcion == 3)
{
opcion = 1;
}
if(currentPad.Buttons & PSP_CTRL_UP)
{
opcion = opcion - 1;
}
else if(currentPad.Buttons && PSP_CTRL_UP && opcion == 1)
{
opcion = 3;
}
}
}
int main()
{
sceCtrlReadBufferPositive(&lastPad, 1);
pspDebugScreenInit();
menu();
mov_menu();
return 0;
}

Imagen de pspgorrister

El motivo de que no te va es

El motivo de que no te va es que estás mezclado en AND lógico (&&), con el AND que opera a nivel de bits (&). Este último lo usas como máscara para evaluar la tecla pulsada.

Deberías estudiarte los operadores lógicos en C, antes de de seguir porque no lo tienes nada claro.

Un saludo.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de copete23

Hola, yo no he programado

Hola, yo no he programado nunca en psp, pero creo que el error lo tienes en el mismo sitio que el anterior, es decir:

else if(currentPad.Buttons && PSP_CTRL_DOWN && opcion == 3);

como he dicho no he tocado psp, pero supongo que currentPad.Buttons && PSP_CTRL_DOWN tendria que ser un puntero a PSP_CTRL_DOWN por lo que tendrás que ponerlo asi:

else if((currentPad.Buttons & PSP_CTRL_DOWN) && opcion == 3);

lo mismo con UP, LEFT...

espero que eso te ayude :)

saludos!

Weno creo que lo que tu

Weno creo que lo que tu dices es correcto ya que los ejemplos que he visto son asi pero aun asi sigue sin funcionar =\

Imagen de copete23

ups!, no habia esto el main,

ups!, no habia visto el main, tienes que meter los datos en un bucle para que se actualicen, sino el programa se para al llegar al final.

int main()
{
pspDebugScreenInit();//supongo que esto solo es para iniciar XD

while(1){
sceCtrlReadBufferPositive(&lastPad, 1);
menu();
mov_menu();
}
return 0;
}

si no te falta ninguna función especifica de la libreria tendria que funcionarte :)

saludetes

Gracias :)

jejeje me pensaba k el main ya era como el while true do de lua :P Ya lo corregi y compile otra vez y sigue sin desplazarse x el menu...

Imagen de copete23

Pues ni idea tio, como no

Pues ni idea tio, como no conozco las librerias, no sé si esque te falta alguna función...

de todas formas intenta poner esta parte así a ver que tal:

void mov_menu()
{
sceCtrlReadBufferPositive(&currentPad, 1);
 
if(currentPad.Buttons & PSP_CTRL_DOWN)
{
opcion = opcion + 1;
}
else if((currentPad.Buttons & PSP_CTRL_DOWN) && (opcion == 3))
{
opcion = 1;
}
if(currentPad.Buttons & PSP_CTRL_UP)
{
opcion = opcion - 1;
}
else if((currentPad.Buttons & PSP_CTRL_UP) && (opcion == 1))
{
opcion = 3;
}
}

luego en el main borra el sceCtrlReadBufferPositive(&lasttPad, 1); del main.


mañana si puedo lo intento

mañana si puedo lo intento y te digo k tal, es que aunke sea verano tengo poco tiemo para el pc :S

Imagen de burnxez

Mismo Problema

Ese mi amigo, es exactamente el mismo problema que he tenido desde que intenté programar para PSP junto con muchos otros...

Lamentablemente en este caso no puedo ayudarte, lo siento.

Espero que alguién con un poco más de conocimientos pueda ayudarte ;-)

Zaludos.

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.