KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: Tastaturpuffer löschen
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hey,
möchte diverse Fotodateien ansehen und beim Drücken der rechten Pfeiltaste zum nächsten Bild wechseln. Um jedes Mal mit derselben Taste ein Foto zu wechseln, müsste auch der Tastaturpuffer auf 0 oder zurückgesetzt werden. Will aber nicht funktionieren. Einmal die rechte Pfeiltaste gedrückt und auf die Schnelle beim letzten Bild gelandet. Lässt sich der Tastaturpuffer löschen oder geht's nur mit zusätzlichen Zeigern?

Code:
while(1){
        
      sceCtrlReadBufferPositive(&pad, 1);
    
      if (pad.Buttons != 0){
                      
       if (pad.Buttons & PSP_CTRL_RIGHT) {
       break; }
                      
      }
}

Bild1:


while(1){
        
      sceCtrlReadBufferPositive(&pad, 1);
    
      if (pad.Buttons != 0){
                      
       if (pad.Buttons & PSP_CTRL_RIGHT) {
       break; }
                      
      }
}

Bild2:

usw.

knopper :
Hey,
möchte diverse Fotodateien ansehen und beim Drücken der rechten Pfeiltaste zum nächsten Bild wechseln. Um jedes Mal mit derselben Taste ein Foto zu wechseln, müsste auch der Tastaturpuffer auf 0 oder zurückgesetzt werden. Will aber nicht funktionieren. Einmal die rechte Pfeiltaste gedrückt und auf die Schnelle beim letzten Bild gelandet. Lässt sich der Tastaturpuffer löschen oder geht's nur mit zusätzlichen Zeigern?

Code:
while(1){
        
      sceCtrlReadBufferPositive(&pad, 1);
    
      if (pad.Buttons != 0){
                      
       if (pad.Buttons & PSP_CTRL_RIGHT) {
       break; }
                      
      }
}

Bild1:


while(1){
        
      sceCtrlReadBufferPositive(&pad, 1);
    
      if (pad.Buttons != 0){
                      
       if (pad.Buttons & PSP_CTRL_RIGHT) {
       break; }
                      
      }
}

Bild2:

usw.


memset(&pad, 0, sizeof(SceCtrlData));
Wink
Aber dass geht viel einfacher... machs einfach so:

Code:
// bla bla bla
Image *images = 0;
images = (Image *)malloc(anzahl_der_bilder * sizeof(Image));
if(!images)
   // Fehler beim Speicher reservieren, nicht weiter machen!

// die Bilder einlesen

int index = 0;
while(!(pad.Buttons & ABBRUCH_TASTE))
{
    // images[index] anzeigen

    memset(&pad, 0, sizeof(SceCtrlData));
    sceCtrlReadBufferPositive(&pad, 1);

    if(pad.Buttons & PSP_CTRL_RIGHT & (index < anzahl_der_bilder))
       index++;
    if(pad.Buttons & PSP_CTRL_LEFT & (index >= 0))
       index--;
    
    // bla bla bla
    sceKernelWaitThread(300000);
};


Damit kannst du auch nach links zurück gehen Smile

@ HacKmaN
JA, genau das isses. DANKE!!! Funzt ausgezeichnet!!! thumb

knopper :
@ HacKmaN
JA, genau das isses. DANKE!!! Funzt ausgezeichnet!!! thumb


Smile

Das Löschen des Tastaturpuffers funzt ausgezeichnet. Allerdings darf man die Taste nicht zu lange drücken, weil ansonsten die nächsten Bilder automatisch nachgeladen werden. Läßt sich das verhindern?
Hi,

so weit ich weiß nur so, dass du dir die zuletzt gedrückte Taste in einer weiteren variable merkst und nur auf einen neuen tastendruck reagierst wenn die taste abweichend der zuletzt gedrückten ist bzw. eine gewisse Zeit vergangen ist...
@anmabagima
Dank dir für den Tipp. Werd's mal ausprobieren...

Edit: Habe die nötige Tastenverzögerung mit 'sceDisplayWaitVblankStart' gemacht.
Referenz-URLs