Aiuto - Cerca - Utenti - Calendario
Versione completa: Pixel ritardati!
.: GBArl.it :. News sulle Console Nintendo - Emulazione - Flash Cards - Trainer > Discussioni Console Nintendo > Programmazione & ROM Hacking (Nintendo)
Ciozun
Ciao (di nuovo),

questo codice stampa una sorta di meteorite formato da 3x3 caratteri, che avanza verso sinistra e, arrivato in fondo, riparte da destra.
I problemi sono 2:

1. Quando deve cancellare il vecchio meteorite con gli spazi (" ") non rimuove completamente tutti i pixel, ma invece essi ritardano a scomparire mettendoci anche qualche secondo, svanendo uno per uno poco per volta. Sapete come risolvere?
2. Problema sostanzialmente opposto: quando stampo i vari caratteri del meteorite, non tutti i pixel compaino! Inoltre a volte capita che compaiono in ritardo. Sapete come risolvere?

La somma di questi due problemi crea un bruttussimo effetto scia...

Grazie!

CODICE
     const char m1[3] = {201,205,187}; // meteor chars
     const char m2[3] = {186,177,186};
     const char m3[3] = {200,205,188};
    
     console->cursorX = 46;
     console->cursorY = 3;
    
     printf("\x1b[37m");
    
     while (1)
     {
         printf(m1);
         console->cursorX -= 3;
         console->cursorY++;
         printf(m2);
         console->cursorX -= 3;
         console->cursorY++;
         printf(m3);
         console->cursorX -= 3;
         console->cursorY -= 2;    
        
         svcSleepThread(100000000);
        
         printf("   ");    // <- 3 spazi
         console->cursorX -= 3;
         console->cursorY++;
         printf("   ");    // <- 3 spazi
         console->cursorX -= 3;
         console->cursorY++;
         printf("   ");    // <- 3 spazi
         console->cursorX -= 4;
         console->cursorY -= 2;
        
         if (console->cursorX == 0)
         {
             console->cursorX = 46;
         }
     }
Prace
Indizio: in che posizione stampi il carattere di spazio dopo lo sleep del thread?
Ciozun
CITAZIONE (Prace @ Friday 15 January 2016 - 20:03) *
Indizio: in che posizione stampi il carattere di spazio dopo lo sleep del thread?


In alto a sinistra
Prace
Ah OK, quindi sono tre spazi quelli tra gli apici? Da cellulare mi sembrava uno
Ciozun
CITAZIONE (Prace @ Friday 15 January 2016 - 20:23) *
Ah OK, quindi sono tre spazi quelli tra gli apici? Da cellulare mi sembrava uno


Si sono 3 (dovevo scrivercelo).
bombottino
Secondo me è un problema di aggiornamento del display (flush).
Non conosco la programmazione 3ds ma credo sia gfxFlushBuffers.
Ciozun
CITAZIONE (bombottino @ Friday 15 January 2016 - 20:29) *
Secondo me è un problema di aggiornamento del display (flush).
Non conosco la programmazione 3ds ma credo sia gfxFlushBuffers.


Il fatto è che io l'ho messo già nel programma principale (nel ciclo per l'esattezza). Questo qui è il codice di un sottoprogramma.
Non so se mettendolo due volte potrebbero succedere "disastri".
Comunque provo a metterlo anche in questo codice e vedo come va.

-ADD-

CODICE
const char m1[3] = {201,205,187}; // meteor chars
    const char m2[3] = {186,177,186};
    const char m3[3] = {200,205,188};
  
    console->cursorX = 46;
    console->cursorY = 3;
  
    printf("\x1b[37m");
  
    while (1)
    {
        printf(m1);
        console->cursorX -= 3;
        console->cursorY++;
        printf(m2);
        console->cursorX -= 3;
        console->cursorY++;
        printf(m3);
        console->cursorX -= 3;
        console->cursorY -= 2;
          
        gfxFlushBuffers();
        gfxSwapBuffers();
        gspWaitForVBlank();
      
        svcSleepThread(100000000);
      
        printf("   ");
        console->cursorX -= 3;
        console->cursorY++;
        printf("   ");
        console->cursorX -= 3;
        console->cursorY++;
        printf("   ");
        console->cursorX -= 3;
        console->cursorY -= 2;
          
        gfxFlushBuffers();
        gfxSwapBuffers();
        gspWaitForVBlank();
      
        console->cursorX--;
      
        if (console->cursorX == 0)
        {
            console->cursorX = 46;
        }
    }


Così va perfettamente! Grazie mille biggrin.gif
bombottino
Bravissimo thumbup.gif
Se sviluppi un bel homebrew poi ce lo fai provare... wink.gif
Ciozun
CITAZIONE (bombottino @ Friday 15 January 2016 - 20:52) *
Bravissimo thumbup.gif
Se sviluppi un bel homebrew poi ce lo fai provare... wink.gif


Certo certo wink.gif
Questa è la versione 'lo-fi' del forum. Per visualizzare la versione completa con molte più informazioni, formattazione ed immagini, per favore clicca qui.
Invision Power Board © 2001-2024 Invision Power Services, Inc.