|
Verfasser |
Nachricht |
gruschi
Legende
Beiträge: 1.301
Gruppe: User
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 447
|
[C-Code]Wo liegt der Fehler
hi,
ich hab jetzt mit c für die psp angefangen.
vorher habe ich nur in c++ mfc-anwendungen geschrieben/gestaltet.
ich dachte mir ich mach mal ein menu nach der anleitung von psp-hilfe.
hier ist der code (ich hab schon etwas rumprobiert...):
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspctrl.h>
PSP_MODULE_INFO("test",0,1,1);
static int running = 1;
int exit_callback(int arg1, int arg2, void *common)
{
sceKernelExitGame();
return 0;
}
int CallbackThread(SceSize args, void *argp)
{
int cbid;
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0;
}
int SetupCallbacks(void)
{
int thid = 0;
thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}
return thid;
}
int aktivmenu = 0;
int maxmenu = 1;
char menu[2][15]={"Bild Anzeigen", "Spiel beenden"};
void printmenu()
{
int i;
for(i=0; i<maxmenu+1; i++)
{
if(aktivmenu == i)
{
pspDebugScreenPrintf("->%s\n", menu[i]);
}
else
{
pspDebugScreenPrintf(" %s\n",menu[i]);
}
}
}
int main()
{
pspDebugScreenInit();
SetupCallbacks();
SceCtrlData pad;
int button = 0;
printmenu();
while(running)
{
sceCtrlReadBufferPositive(&pad, 1);
if((pad.Buttons & PSP_CTRL_DOWN) && (aktivmenu != maxmenu) && (button == 0))
{
aktivmenu++;
pspDebugScreenClear();
printmenu();
}
if((pad.Buttons & PSP_CTRL_UP) && (aktivmenu !=0) && (button == 0))
{
aktivmenu-=1;
pspDebugScreenClear();
printmenu();
}
if((pad.Buttons & PSP_CTRL_UP) && (aktivmenu !=0) && (button == 0))
{
aktivmenu-=1;
pspDebugScreenClear();
printmenu();
}
if((aktivmenu == 1) && (pad.Buttons & PSP_CTRL_CROSS))
{
sceKernelExitGame();
}
if((aktivmenu == 0) && (pad.Buttons & PSP_CTRL_CROSS))
{
pspDebugScreenClear();
pspDebugScreenPrintf("Wenn du das liest hat es geklappt");
sceKernelSleepThread();
if(pad.Buttons & PSP_CTRL_CIRCLE)
{
pspDebugScreenClear();
printmenu();
}
}
}
return 0;
}
probleme habe ich mit diesem teil:
if((aktivmenu == 0) && (pad.Buttons & PSP_CTRL_CROSS))
{
pspDebugScreenClear();
pspDebugScreenPrintf("Wenn du das liest hat es geklappt");
sceKernelSleepThread();
if(pad.Buttons & PSP_CTRL_CIRCLE)
{
pspDebugScreenClear();
printmenu();
}
}
wenn die schrift angezeigt wird soll man mit zurück ins menu kommen, doch da passiert nichts...
es wäre schön wenn mir einer helfen kann der auch bescheid weiß(!!!)
lg
|
|
17.08.2011 13:41 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [C-Code]Wo liegt der Fehler
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
|
|
17.08.2011 13:47 |
|
Folgende User bedanken sich: |
|
~Hook~
C-Coder
Beiträge: 1.706
Gruppe: User
Registriert seit: Dec 2010
Status:
Offline
Danke erhalten: 1129
|
RE: [C-Code]Wo liegt der Fehler
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
Yoaah, mit sceKernelSleepThread(); hast du dein Programm komplett angehalten. Einfach rausschmeißen dann müsste es klappen
<?php echo 'Signatur'; ?>
Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2011 13:52 von ~Hook~.
|
|
17.08.2011 13:52 |
|
Folgende User bedanken sich: |
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [C-Code]Wo liegt der Fehler
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
Yoaah, mit sceKernelSleepThread(); hast du dein Programm komplett angehalten. Einfach rausschmeißen dann müsste es klappen
Hmm ne ich glaub da würde es auch nicht klappen da man ja während man X drück und aktivmenu 0 ist O drücken müsste. Naja und außerdem würde ich noch was einbauen mit buttons == 0 da das sonst immer wieder holt ausgeführt wird. DU könntest das eben auch anders machen.
|
|
17.08.2011 13:57 |
|
Folgende User bedanken sich: |
|
~Hook~
C-Coder
Beiträge: 1.706
Gruppe: User
Registriert seit: Dec 2010
Status:
Offline
Danke erhalten: 1129
|
RE: [C-Code]Wo liegt der Fehler
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
Yoaah, mit sceKernelSleepThread(); hast du dein Programm komplett angehalten. Einfach rausschmeißen dann müsste es klappen
Hmm ne ich glaub da würde es auch nicht klappen da man ja während man X drück und aktivmenu 0 ist O drücken müsste. Naja und außerdem würde ich noch was einbauen mit buttons == 0 da das sonst immer wieder holt ausgeführt wird. DU könntest das eben auch anders machen.
Wenn du das Menü anderes machen würdest, hättest du dieses Problem nicht. z.B. Switch case
<?php echo 'Signatur'; ?>
|
|
17.08.2011 14:05 |
|
|
|
gruschi
Legende
Beiträge: 1.301
Gruppe: User
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 447
|
RE: [C-Code]Wo liegt der Fehler
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
Yoaah, mit sceKernelSleepThread(); hast du dein Programm komplett angehalten. Einfach rausschmeißen dann müsste es klappen
Hmm ne ich glaub da würde es auch nicht klappen da man ja während man X drück und aktivmenu 0 ist O drücken müsste. Naja und außerdem würde ich noch was einbauen mit buttons == 0 da das sonst immer wieder holt ausgeführt wird. DU könntest das eben auch anders machen.
und wie macht man das anders?
(wie gesagt ich bin noch ein noob^^)
|
|
17.08.2011 14:06 |
|
|
|
~Hook~
C-Coder
Beiträge: 1.706
Gruppe: User
Registriert seit: Dec 2010
Status:
Offline
Danke erhalten: 1129
|
RE: [C-Code]Wo liegt der Fehler
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
Yoaah, mit sceKernelSleepThread(); hast du dein Programm komplett angehalten. Einfach rausschmeißen dann müsste es klappen
Hmm ne ich glaub da würde es auch nicht klappen da man ja während man X drück und aktivmenu 0 ist O drücken müsste. Naja und außerdem würde ich noch was einbauen mit buttons == 0 da das sonst immer wieder holt ausgeführt wird. DU könntest das eben auch anders machen.
und wie macht man das anders?
(wie gesagt ich bin noch ein noob^^)
Mit Switch Case hättest du dieses Problem nicht
Mal ein Beispiel:
char *items[5] = { "Text anzeigen", "Option 2", "Option 3", "Option 4", "Beenden" };
while(1) {
sceCtrlReadBufferPositive(&pad, 1); if(pad.Buttons & PSP_CTRL_RTRIGGER) { int ret = menu(); switch(ret) { case 0: Code der passiert...(); break;
case 1: sceKernelExitGame(); break; case 2: Text("TEXT"); break;
etc....
}
<?php echo 'Signatur'; ?>
Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2011 14:18 von ~Hook~.
|
|
17.08.2011 14:10 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [C-Code]Wo liegt der Fehler
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
Yoaah, mit sceKernelSleepThread(); hast du dein Programm komplett angehalten. Einfach rausschmeißen dann müsste es klappen
Hmm ne ich glaub da würde es auch nicht klappen da man ja während man X drück und aktivmenu 0 ist O drücken müsste. Naja und außerdem würde ich noch was einbauen mit buttons == 0 da das sonst immer wieder holt ausgeführt wird. DU könntest das eben auch anders machen.
Wenn du das Menü anderes machen würdest, hättest du dieses Problem nicht. z.B. Switch case
Hmm ich glaub das liefe aufs selbe hinaus.
Du könntest eine neue "int Funktion" machen ansonsten fällt mir gerade keiner anderer Lösungsweg ein. Warte am besten bis ein guter Dev on kommt der wird dir sicher besser helfen könne
|
|
17.08.2011 14:13 |
|
|
|
gruschi
Legende
Beiträge: 1.301
Gruppe: User
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 447
|
RE: [C-Code]Wo liegt der Fehler
[quote=stehn]
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
Yoaah, mit sceKernelSleepThread(); hast du dein Programm komplett angehalten. Einfach rausschmeißen dann müsste es klappen
Hmm ne ich glaub da würde es auch nicht klappen da man ja während man X drück und aktivmenu 0 ist O drücken müsste. Naja und außerdem würde ich noch was einbauen mit buttons == 0 da das sonst immer wieder holt ausgeführt wird. DU könntest das eben auch anders machen.
und wie macht man das anders?
(wie gesagt ich bin noch ein noob^^)
Mit Switch Case hättest du dieses Problem nicht
Mal ein Beispiel:
char *items[5] = { "Text anzeigen", "Option 2", "Option 3", "Option 4", "Beenden" };
o.Ô
kannst du das bitte etwas erklären?
muss ich da noch etwas includieren?
Hmm ich glaub das liefe aufs selbe hinaus.
Du könntest eine neue "int Funktion" machen ansonsten fällt mir gerade keiner anderer Lösungsweg ein. Warte am besten bis ein guter Dev on kommt der wird dir sicher besser helfen könne
ahhhja...
Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2011 14:16 von gruschi.
|
|
17.08.2011 14:13 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [C-Code]Wo liegt der Fehler
[quote=stehn]
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
Yoaah, mit sceKernelSleepThread(); hast du dein Programm komplett angehalten. Einfach rausschmeißen dann müsste es klappen
Hmm ne ich glaub da würde es auch nicht klappen da man ja während man X drück und aktivmenu 0 ist O drücken müsste. Naja und außerdem würde ich noch was einbauen mit buttons == 0 da das sonst immer wieder holt ausgeführt wird. DU könntest das eben auch anders machen.
und wie macht man das anders?
(wie gesagt ich bin noch ein noob^^)
Mit Switch Case hättest du dieses Problem nicht
Mal ein Beispiel:
char *items[5] = { "Text anzeigen", "Option 2", "Option 3", "Option 4", "Beenden" };
o.Ô
kannst du das bitte etwas erklären?
muss ich da noch etwas includieren?
Hmm ich glaub das liefe aufs selbe hinaus.
Du könntest eine neue "int Funktion" machen ansonsten fällt mir gerade keiner anderer Lösungsweg ein. Warte am besten bis ein guter Dev on kommt der wird dir sicher besser helfen könne
ahhhja...
Das ist keine Switch Case sonder eine char array
Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2011 14:16 von dark-awesome.
|
|
17.08.2011 14:16 |
|
Folgende User bedanken sich: |
|
gruschi
Legende
Beiträge: 1.301
Gruppe: User
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 447
|
RE: [C-Code]Wo liegt der Fehler
Das ist keine Switch Case sonder eine char array
was macht die/das?
|
|
17.08.2011 14:18 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [C-Code]Wo liegt der Fehler
Das ist keine Switch Case sonder eine char array
was macht die/das?
Also einfach gesagt die speicher Text
Also ich könnte dir nun einen Beispiel Code machen aber da hättest du ja nichts gelernt oder ? ^^
|
|
17.08.2011 14:20 |
|
|
|
~Hook~
C-Coder
Beiträge: 1.706
Gruppe: User
Registriert seit: Dec 2010
Status:
Offline
Danke erhalten: 1129
|
RE: [C-Code]Wo liegt der Fehler
[quote=stehn]
Ja logo du hast den Thread angehalten wie soll man dann auch mit O zurück kommen ?
Yoaah, mit sceKernelSleepThread(); hast du dein Programm komplett angehalten. Einfach rausschmeißen dann müsste es klappen
Hmm ne ich glaub da würde es auch nicht klappen da man ja während man X drück und aktivmenu 0 ist O drücken müsste. Naja und außerdem würde ich noch was einbauen mit buttons == 0 da das sonst immer wieder holt ausgeführt wird. DU könntest das eben auch anders machen.
und wie macht man das anders?
(wie gesagt ich bin noch ein noob^^)
Mit Switch Case hättest du dieses Problem nicht
Mal ein Beispiel:
char *items[5] = { "Text anzeigen", "Option 2", "Option 3", "Option 4", "Beenden" };
o.Ô
kannst du das bitte etwas erklären?
muss ich da noch etwas includieren?
Hmm ich glaub das liefe aufs selbe hinaus.
Du könntest eine neue "int Funktion" machen ansonsten fällt mir gerade keiner anderer Lösungsweg ein. Warte am besten bis ein guter Dev on kommt der wird dir sicher besser helfen könne
ahhhja...
Das ist keine Switch Case sonder eine char array
Schau doch mal oben was ich geschrieben, habe
Die Menu schreibst du in einem Array, und unten ist der Switch Case für die Funktionen
Habe nur vergessen der Switch Case noch zu schreiben
<?php echo 'Signatur'; ?>
|
|
17.08.2011 14:20 |
|
|
|
gruschi
Legende
Beiträge: 1.301
Gruppe: User
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 447
|
RE: [C-Code]Wo liegt der Fehler
char *items[5] = { "Text anzeigen", "Option 2", "Option 3", "Option 4", "Beenden" };
seit wann macht man denn ein semikolon hinter die geschweifte klammer?
|
|
17.08.2011 14:23 |
|
|
|
~Hook~
C-Coder
Beiträge: 1.706
Gruppe: User
Registriert seit: Dec 2010
Status:
Offline
Danke erhalten: 1129
|
RE: [C-Code]Wo liegt der Fehler
char *items[5] = { "Text anzeigen", "Option 2", "Option 3", "Option 4", "Beenden" };
seit wann macht man denn ein semikolon hinter die geschweifte klammer?
Sagen wir das so, da es kein Befehlspaket ist, wird der Array nicht mit einer geschweiften Klammer abgeschlossen, sondern mit einem Semicolon^^
<?php echo 'Signatur'; ?>
|
|
17.08.2011 14:26 |
|
Folgende User bedanken sich: |
|
|