Antwort schreiben  Thema schreiben 
Seiten (2): « Erste [1] 2 Nächste > Letzte »
Verfasser Nachricht
mipez
Halbprofi
***


Beiträge: 190
Gruppe: User
Registriert seit: Dec 2010

Status: Offline
Danke erhalten: 88
Beitrag: #1
xPSP  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

Code:
#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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Chaosduckman
Halbprofi
***


Beiträge: 170
Gruppe: User
Registriert seit: May 2010

Status: Offline
Danke erhalten: 43
Beitrag: #2
xPSP  RE: Inkrement spinnt

Einfach die Code Zeile:

Code:
number+=1;

Mit dieser

Code:
++number

tauschen und es sollte gehen =)

Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:03 von Chaosduckman.

17.02.2011 17:57
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mipez
Halbprofi
***


Beiträge: 190
Gruppe: User
Registriert seit: Dec 2010

Status: Offline
Danke erhalten: 88
Beitrag: #3
xPSP  RE: Inkrement spinnt

Chaosduckman :
Einfach die Code Zeile:

Code:
number+=1;

Mit dieser

Code:
++number

tauschen und es sollte gehen =)


Leider nicht.
Auch printf("Your Number is: %i/n",number++); hat nix gebracht...

17.02.2011 17:59
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
D3lta
Experte
****


Beiträge: 663
Gruppe: User
Registriert seit: Dec 2010

Status: Abwesend
Danke erhalten: 205
Beitrag: #4
xPSP  RE: Inkrement spinnt

Du solltest am Ende der If-Anweisung noch einen Befehl zum warten, bis die X losgelassen wurde

Code:
while(pad.Buttons &amp; PSP_CTRL_CROSS)
            {sceCtrlReadBufferPositive(&amp;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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Chaosduckman
Halbprofi
***


Beiträge: 170
Gruppe: User
Registriert seit: May 2010

Status: Offline
Danke erhalten: 43
Beitrag: #5
xPSP  RE: Inkrement spinnt

Ich habe mal sauber gemacht. Dann verschwinden meist die Fehler Big Grin

Code:
int main( void )
{
    int number = 0;

    pspDebugScreenInit();
    SetupCallbacks();

    SceCtrlData pad;

    printf( "Use [X] to start\n" );

    while( !(pad.Buttons &amp; PSP_CTRL_CIRCLE) )
    {
        pspDebugScreenClear();                    //Bildschirm wieder sauber machen
        printf( "Your number is: %i\n", number );
        printf( "Use [X] to continue, [O] to exit" );

        sceCtrlReadBufferPositive( &amp;pad, 1 );    //Buttons holen
        if ( pad.Buttons &amp; 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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
HacKmaN (Feb-17-2011), pspbricker (Feb-17-2011)
Rroia
Profi
****


Beiträge: 303
Gruppe: User
Registriert seit: Apr 2010

Status: Offline
Danke erhalten: 173
Beitrag: #6
xPSP  RE: Inkrement spinnt

Ok, der aufgeräumte Code sieht eigentlich nicht schlecht aus, nur eine Stelle würde ich noch verbessern

Code:
if ( !(pad.Buttons &amp; 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 Tongue

Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:25 von Rroia.

17.02.2011 18:21
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Ceikor
Ex-Developer
****


Beiträge: 581
Gruppe: User
Registriert seit: Dec 2008

Status: Abwesend
Danke erhalten: 701
Beitrag: #7
RE: Inkrement spinnt

Nicht ganz mein lieber Wink 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 Wink

Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:44 von Ceikor.

17.02.2011 18:43
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
HacKmaN (Feb-17-2011)
mipez
Halbprofi
***


Beiträge: 190
Gruppe: User
Registriert seit: Dec 2010

Status: Offline
Danke erhalten: 88
Beitrag: #8
xPSP  RE: Inkrement spinnt

Hm das mit dem Delay hat geklappt:

Spoiler: (anzeigen)
Danke an alle.

Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 18:47 von mipez.

17.02.2011 18:45
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #9
RE: Inkrement spinnt

Wieso schreiben eigentlich die meisten die geschweiften Klammern direkt ohne Neuzeile?

Ich finde, dass

Code:
while(...)
{    
    if(...)
    {
        // blaaaaa
        // blaaaaa
    }
    else
    {
        // blaaaaaa
        // blaaaaaa
    };
    
    if(...)
        // blaaaa
    
    // blaaaaaaaa
    // blaaaaaaaa
    // blaaaaaaaa
};


viel übersichtlicher aussieht als

Code:
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
crunchop (Feb-18-2011), dark-awesome (Feb-17-2011)
D3lta
Experte
****


Beiträge: 663
Gruppe: User
Registriert seit: Dec 2010

Status: Abwesend
Danke erhalten: 205
Beitrag: #10
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
dark-awesome (Feb-17-2011)
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #11
xPSP  RE: Inkrement spinnt

D3lta :
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
dark-awesome
stehn


Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010

Status: Offline
Danke erhalten: 2192
Beitrag: #12
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 Wink
Ich sag nur jeder wie er es Mag Hauptsache es ist für einen Lesbar ;P

Ich Persönlich habe es so gelernt

Code:
if (..) {
     //......
}

aber mache es auch meistens so:

if (..)
{
     //......
}

Naja ist halt alles Ansichtssache Wink

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 Wink


West Zeit / Westside

Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 20:19 von dark-awesome.

17.02.2011 20:03
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #13
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.

Code:
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 Wink

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.

Code:
/*
* 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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
dark-awesome (Feb-17-2011)
Rroia
Profi
****


Beiträge: 303
Gruppe: User
Registriert seit: Apr 2010

Status: Offline
Danke erhalten: 173
Beitrag: #14
xPSP  RE: Inkrement spinnt

Ceikor :
Nicht ganz mein lieber Wink 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 Wink


Ist das denn ein Problem, dass die Pause nur nach dem X 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

Code:
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
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
anmabagima
Ex-Developer
****


Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009

Status: Offline
Danke erhalten: 530
Beitrag: #15
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Seiten (2): « Erste [1] 2 Nächste > Letzte »
Antwort schreiben  Thema schreiben 

Druckversion anzeigen
Thema einem Freund senden
Thema abonnieren | Thema zu den Favoriten hinzufügen




» zum Seitenanfang