[ dulesusic @ 07.04.2011. 23:22 ] @
Pravim ping pong igru koja treba da radi na LPC2468 ploci sa ARM7 mikrokontrolerom.
Imam problem sa unosom karaktera sa tastature. Kad pritisnem odredjeni karakter za pomeranje reketa na igri, on se ne pomeri za 5 pixela (koliko sam stavio da je korak) nego se odmah zakuca u krajnju levu ili desnu stranu (kao da signal sa tastature predugo traje pa se javi oscilovanje :( Bounce). Ispravih to (dodavanjem promenljive prvi koja se vidi u prilozenom kodu), medjutim, sad se desava da je to sporo da mi se sadrzaj ekrana ne osvezi momentalno, neko nekad prisinem i po 3 puta taster a reket se ispise na onoj poziciji na kojoj bi se ispisao svakako nakon 3 pritiska tastera, a onog izmedju ne postoji... Mislim da je problem u funkciji getchar() i to sto ispod nje ide ostatak koda koji pomera rekete. Ispravite me ako gresim i voleo bih da cujem vase misljenje kako da ispravim ovo? Problem postoji, a ja nemam ideju. Kao sto rekoh, mislim da funkcija getchar() treba nekako da se "izoluje" od ostatka koda koji sledi ispod nje, ali da se ostavi deo if(prvi) jer mi to sprecava bouncing sa ulaza...


Code:
void play()
{
char c1;
char prvi=1;

    while(1)
    {
        if(kbhit())
        {
            c1=getchar();
                
                
                
                if(prvi)
                {
                
                    prvi=0;
                        
                        if(c1=='a' || c1=='A')
                            {
                                movebat('A');
                            }
                        
                        if(c1=='y' || c1=='Y')
                            {
                                movebat('Y');
                            }
                        
                        if(c1=='j' || c1=='J')
                            {
                                movebat('J');
                            }
                    
                        if(c1=='m' || c1=='M')
                            {
                                movebat('M');
                
                            }                
            

                }
                
        
        } else prvi=1;
    }
}
[ Mihajlo Cvetanović @ 14.04.2011. 23:10 ] @
Da li si rešio problem?
[ dulesusic @ 14.04.2011. 23:25 ] @
Jesam, napisao sam drugačiju funkciju koja je radila isto sto se ocekivalo i od ovog, gore navedenog, načina:

Code:
void movebat (void)
{
char ulaz;

    if(kbhit())
    {
        ulaz=getchar();
    
        if((ulaz=='a' || ulaz=='A') && batA.x_koordinata>0)
            {
                batA.x_koordinata_temp=batA.x_koordinata;
                batA.x_koordinata-=25;
                
                lcd_fillRect(frame_map, batA.x_koordinata_temp, batA.y_koordinata_temp, batA.x_koordinata_temp+batA.duzina, batA.y_koordinata_temp+batA.sirina,WHITE);
                lcd_fillRect(frame_map, batA.x_koordinata, batA.y_koordinata, batA.x_koordinata+batA.duzina, batA.y_koordinata+batA.sirina, BLACK);
            }
        else

        if((ulaz=='s' || ulaz=='S') && batA.x_koordinata+batA.duzina<240)
            {
                batA.x_koordinata_temp=batA.x_koordinata;
                batA.x_koordinata+=25;
                
                lcd_fillRect(frame_map, batA.x_koordinata_temp, batA.y_koordinata_temp, batA.x_koordinata_temp+batA.duzina, batA.y_koordinata_temp+batA.sirina,WHITE);
                lcd_fillRect(frame_map, batA.x_koordinata, batA.y_koordinata, batA.x_koordinata+batA.duzina, batA.y_koordinata+batA.sirina, BLACK);

            }
        else
        
        if((ulaz=='k' || ulaz=='K') && batB.x_koordinata>0)
            {
                batB.x_koordinata_temp=batB.x_koordinata;
                batB.x_koordinata-=25;
            
                lcd_fillRect(frame_map, batB.x_koordinata_temp, batB.y_koordinata_temp, batB.x_koordinata_temp+batB.duzina, batB.y_koordinata_temp+batB.sirina,WHITE);
                lcd_fillRect(frame_map, batB.x_koordinata, batB.y_koordinata, batB.x_koordinata+batB.duzina, batB.y_koordinata+batB.sirina, RED);

            }
        else
    
        if((ulaz=='l' || ulaz=='L') && batB.x_koordinata+batB.duzina<240)
            {
                batB.x_koordinata_temp=batB.x_koordinata;
                batB.x_koordinata+=25;
                
                lcd_fillRect(frame_map, batB.x_koordinata_temp, batB.y_koordinata_temp, batB.x_koordinata_temp+batB.duzina, batB.y_koordinata_temp+batB.sirina,WHITE);
                lcd_fillRect(frame_map, batB.x_koordinata, batB.y_koordinata, batB.x_koordinata+batB.duzina, batB.y_koordinata+batB.sirina, RED);

            }
        
        else
        
        if((ulaz=='q' || ulaz=='Q'))
            {
            usleep(1000);
            lcd_fillScreen(frame_map, BLACK);
            exit(1);
            }
    }


}