|
Verfasser |
Nachricht |
mipez
Halbprofi
Beiträge: 190
Gruppe: User
Registriert seit: Dec 2010
Status:
Offline
Danke erhalten: 88
|
Inkrement spinnt
Ich hab mal versucht den Counter aus den Tuts abzuwandeln... prinzipiell funktioniert er auch, nur ist der Startwert nicht 0 und das Inkrement nicht 1 oô
Woran könnte es liegen?
MfG. mipez
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspdisplay.h>
#include <pspctrl.h>
PSP_MODULE_INFO("Hello World",0,1,1);
#define printf pspDebugScreenPrintf
/* 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;
}
//Main Code
int main() {
pspDebugScreenInit();
SetupCallbacks();
int number=0;
SceCtrlData pad;
printf("Use [X] to start");
while(1) {
sceCtrlReadBufferPositive(&pad, 1);
if(pad.Buttons & PSP_CTRL_CROSS) {
pspDebugScreenClear();
number+=1;
printf("Your number is: %i\n",number);
printf("Use [X] to continue, [O] to exit");
}
if(pad.Buttons & PSP_CTRL_CIRCLE){
sceKernelExitGame();
}
}
}
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 17:51 von mipez.
|
|
17.02.2011 17:50 |
|
|
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Inkrement spinnt
Einfach die Code Zeile:
Mit dieser
tauschen und es sollte gehen =)
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:03 von Chaosduckman.
|
|
17.02.2011 17:57 |
|
|
|
mipez
Halbprofi
Beiträge: 190
Gruppe: User
Registriert seit: Dec 2010
Status:
Offline
Danke erhalten: 88
|
RE: Inkrement spinnt
Einfach die Code Zeile:
Mit dieser
tauschen und es sollte gehen =)
Leider nicht.
Auch printf("Your Number is: %i/n",number++); hat nix gebracht...
|
|
17.02.2011 17:59 |
|
|
|
D3lta
Experte
Beiträge: 663
Gruppe: User
Registriert seit: Dec 2010
Status:
Abwesend
Danke erhalten: 205
|
RE: Inkrement spinnt
Du solltest am Ende der If-Anweisung noch einen Befehl zum warten, bis die losgelassen wurde
while(pad.Buttons & PSP_CTRL_CROSS)
{sceCtrlReadBufferPositive(&pad, 1);}
mfg D3lta
"Linux is like a tent, no windows, no gates and an apache inside."
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:04 von D3lta.
|
|
17.02.2011 18:03 |
|
|
|
Chaosduckman
Halbprofi
Beiträge: 170
Gruppe: User
Registriert seit: May 2010
Status:
Offline
Danke erhalten: 43
|
RE: Inkrement spinnt
Ich habe mal sauber gemacht. Dann verschwinden meist die Fehler
int main( void )
{
int number = 0;
pspDebugScreenInit();
SetupCallbacks();
SceCtrlData pad;
printf( "Use [X] to start\n" );
while( !(pad.Buttons & PSP_CTRL_CIRCLE) )
{
pspDebugScreenClear(); //Bildschirm wieder sauber machen
printf( "Your number is: %i\n", number );
printf( "Use [X] to continue, [O] to exit" );
sceCtrlReadBufferPositive( &pad, 1 ); //Buttons holen
if ( pad.Buttons & PSP_CTRL_CROSS ) //Wenn X gedrückt ist number um 1 erhöhen.
++number;
sceKernelDelayThread( 250 * 1000 ); //Eine Pause mit 250ms.
}
return 0;
}
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:15 von Chaosduckman.
|
|
17.02.2011 18:12 |
|
Folgende User bedanken sich: |
|
Rroia
Profi
Beiträge: 303
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 173
|
RE: Inkrement spinnt
Ok, der aufgeräumte Code sieht eigentlich nicht schlecht aus, nur eine Stelle würde ich noch verbessern
if ( !(pad.Buttons & PSP_CTRL_CROSS ))
{ //Diese Klammer ist wichtig
//Wenn X gedrückt ist number um 1 erhöhen.
//++number, number++ oder number+=1 macht !HIER! keinen unterschied
//number++ sieht aber mMn besser aus :P
number++;
sceKernelDelayThread( 250 * 1000 ); //Eine Pause mit 250ms.
}//Diese Klammer natürlich auch
}
return 0;
EDIT: Da hab ich nicht aufgepasst, jetzt ists wohl richtig
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:25 von Rroia.
|
|
17.02.2011 18:21 |
|
|
|
Ceikor
Ex-Developer
Beiträge: 581
Gruppe: User
Registriert seit: Dec 2008
Status:
Abwesend
Danke erhalten: 701
|
RE: Inkrement spinnt
Nicht ganz mein lieber der Code war schon ok, den wenn nur 1 befehl unter oder hinter einer if anweisung steht benötigt man keine {}
Un was du da jetzt gemacht hast bedeutet das die Pause nur nach drücken von X gemacht wird
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:44 von Ceikor.
|
|
17.02.2011 18:43 |
|
Folgende User bedanken sich: |
|
mipez
Halbprofi
Beiträge: 190
Gruppe: User
Registriert seit: Dec 2010
Status:
Offline
Danke erhalten: 88
|
RE: Inkrement spinnt
Hm das mit dem Delay hat geklappt:
int main() {
pspDebugScreenInit();
SetupCallbacks();
int number=0;
SceCtrlData pad;
printf("Use [X] to start");
while(1) {
sceCtrlReadBufferPositive(&pad, 1);
if(pad.Buttons & PSP_CTRL_CROSS){
pspDebugScreenClear();
++number;
printf("Your number is: %i\n",number);
sceKernelDelayThread( 250 * 1000 );
printf("Use [X] to continue, [O] to exit");
}
if(pad.Buttons & PSP_CTRL_CIRCLE){
sceKernelExitGame();
}
}
Danke an alle.
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:47 von mipez.
|
|
17.02.2011 18:45 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Inkrement spinnt
Wieso schreiben eigentlich die meisten die geschweiften Klammern direkt ohne Neuzeile?
Ich finde, dass
while(...)
{
if(...)
{
// blaaaaa
// blaaaaa
}
else
{
// blaaaaaa
// blaaaaaa
};
if(...)
// blaaaa
// blaaaaaaaa
// blaaaaaaaa
// blaaaaaaaa
};
viel übersichtlicher aussieht als
while(...) {
if(...) {
// blaaaaa
// blaaaaa
}
else {
// blaaaaaa
// blaaaaaa
};
if(...)
// blaaaa
// blaaaaaaaa
// blaaaaaaaa
// blaaaaaaaa
};
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 19:37 von HacKmaN.
|
|
17.02.2011 19:36 |
|
Folgende User bedanken sich: |
|
D3lta
Experte
Beiträge: 663
Gruppe: User
Registriert seit: Dec 2010
Status:
Abwesend
Danke erhalten: 205
|
RE: Inkrement spinnt
Ich finde es auch ohne Neuzeile übersichtlich genug, doch das ist Ansichtssache, außerdem geht es ohne doppelte Newlines schneller und der Source wird nicht so lang...
mfg D3lta
"Linux is like a tent, no windows, no gates and an apache inside."
|
|
17.02.2011 19:39 |
|
Folgende User bedanken sich: |
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Inkrement spinnt
Ich finde es auch ohne Neuzeile übersichtlich genug, doch das ist Ansichtssache, außerdem geht es ohne doppelte Newlines schneller und der Source wird nicht so lang...
mfg D3lta
1. Bei sehr langen und komplizierten Codes, wird der Code fast unlesbar.
2. Lieber ein langer Source, als ein nicht gut formatierter.
|
|
17.02.2011 19:43 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: Inkrement spinnt
JA HackmaN da hast du zwar recht aber genauso wie es Links und Rechtshänder gibt die alle unterschiedlich schreiben gibt es halt auch bei C unterschiedliche Schreibweisen
Ich sag nur jeder wie er es Mag Hauptsache es ist für einen Lesbar ;P
Ich Persönlich habe es so gelernt
if (..) {
//......
}
aber mache es auch meistens so:
if (..)
{
//......
}
Naja ist halt alles Ansichtssache
Meistens wenn ein Code lang ist teil ich mir auch die einzelnen Code Abschnitte ein durch
//-------------------------------------------------------------------------------
Edit an HackmaN:
Ja das gute alte
/* ......... */
mach ich auch manchmal noch aber da finde ich einfach // ...... bequemer
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 20:19 von dark-awesome.
|
|
17.02.2011 20:03 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Inkrement spinnt
Naja, bei mir ists ne Mischung aus "neuem" und "altem" Stiel...
ich schreib zwar alles mit Neuzeile und packe niemals mehrere Funktionen in eine Zeile (wie es heutzutage meistens gemacht wird), mache aber immer noch die (inzwischen nicht mehr nötigen) Semikolons ans Ende eines Blocks (früher Standart), also z.B.
if(...)
{
// blaaa
} // hier kein Semikolon, weil ein else folgt
else
{
// blaaa
}; // Semikolon macht deutlich, dass kein Else mehr folgt
Inzwischen wird dieses Semikolon von modernen Compilern ignoriert, aber ich habs so gelernt und mache es auch so weiter
Bei kleinen Codes ist das mit der Neuzeile ja auch nicht so schlimm, aber bei langen Codes wird es echt total unleserlich.
Auch mach ich (außer bei so Beispiel Codes wie oben) fast nie die in C++ neuen Kommentare (//, inzwischen gibts die in C ja auch), sondern benutz' am liebsten die standart-C Kommentare, z.B.
/*
* Blaaaaaaa
*/
u16 make_blaaaa(u32 bla1, u16 *bla2)
{
/* blaaaaaaa */
if(bla1 == 0x12345678)
{
/* BLABLABLA */
bla1 = _lw(bla2 + 0x5);
};
return bla2[0x4321];
};
Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 20:15 von HacKmaN.
|
|
17.02.2011 20:10 |
|
Folgende User bedanken sich: |
|
Rroia
Profi
Beiträge: 303
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 173
|
RE: Inkrement spinnt
Nicht ganz mein lieber der Code war schon ok, den wenn nur 1 befehl unter oder hinter einer if anweisung steht benötigt man keine {}
Un was du da jetzt gemacht hast bedeutet das die Pause nur nach drücken von X gemacht wird
Ist das denn ein Problem, dass die Pause nur nach dem drücken gemacht wird? Auf dem PC ist das kein Problem und ehrlich gesagt hab ich mich mit der PSP nicht so auseiander gesetzt. Ich dachte nur daran, dass die dann schneller reagiert.
Und das ohne Klammern finde ich einfach unübersichtlich, mit Klammern erkennt man das besser was alles drin steht.
@HacKmaN
Ich schreibe eigentlich auch wie dein zweites Beispiel also
if (x==1) {
//irgentetwas
}
else {
//was anderes
}
Und da ich immer gleichweit einrücke sieht man sehr gut, welcher Code in welchen Block gehört. Ich hab das in meinem Java Buch so gelernt, und vorher in C++ anders, fand das von Java aber übersichtlicher.
|
|
17.02.2011 20:29 |
|
|
|
anmabagima
Ex-Developer
Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 530
|
RE: Inkrement spinnt
Hi,
dein Problem ist, dass bei jedem Schleifendurchlauf der Button-Wert gelesen wird....das heißt dass du den X-Knopf gar nicht schnell genug loslassen kannst, dass er nur um 1 hochzählt....
Eine sehr bewährte Methode um das zu umgehen ist folgende:
[code]
SceCtrlData pad, lastPad;
while (1){
sceCtrlReadBufferPositive( &pad, 1 );
if (pad.buttons != lastPad.buttons){
if (pad.buttons & PSP_CTRL_CROSS){
|
|
18.02.2011 09:07 |
|
|
|
|