Płynne chodzenie

Odpowiedz Nowy wątek
2012-07-01 17:48
keylistener
0

Witam, chciałbym zrobić płynne przesuwanie kwadratu, ale niestety nie mogę wpaść na pomysł jak to zrobić. Na razie mam taki kod:

addKeyListener(new KeyAdapter(){
            @Override
            public void keyPressed(KeyEvent e){
                if(e.getKeyCode() == KeyEvent.VK_LEFT){                    
                    world.navigateMap(World.PAN_RIGHT);
                }
                if(e.getKeyCode() == KeyEvent.VK_RIGHT){
                    world.navigateMap(World.PAN_LEFT);
                }
                if(e.getKeyCode() == KeyEvent.VK_UP){
                     world.navigateMap(World.PAN_DOWN);
                }
                if(e.getKeyCode() == KeyEvent.VK_DOWN){
                     world.navigateMap(World.PAN_UP);                    
                }

            }
            @Override
            public void keyReleased(KeyEvent e){
                world.stopMoveMap();
            }
            @Override
            public void keyTyped(KeyEvent e){

            }
        });

Jak widać mój kod zatrzymuje przesunięcie mapy kiedy żaden klawisz nie jest wciśnięty. Coś takiego przy "nawrotach" kwadratu na chwilkę przycina przesunięcie kwadratu, przez co poruszanie nie jest płynne.

Pozostało 580 znaków

2012-07-01 18:55
0

Spróbuj takiego rozwiązania:

addKeyListener(new KeyAdapter(){
            @Override
            public void keyPressed(KeyEvent e){
                if(e.getKeyCode() == KeyEvent.VK_LEFT){                    
                    LEFT=true;
                }
                if(e.getKeyCode() == KeyEvent.VK_RIGHT){
                    RIGHT=true;
                }
                if(e.getKeyCode() == KeyEvent.VK_UP){
                     UP=true;
                }
                if(e.getKeyCode() == KeyEvent.VK_DOWN){
                     DOWN=true;                    
                }

            }
            @Override
            public void keyReleased(KeyEvent e){
                 if(e.getKeyCode() == KeyEvent.VK_LEFT){                    
                    LEFT=false;
                }
                if(e.getKeyCode() == KeyEvent.VK_RIGHT){
                    RIGHT=false;
                }
                if(e.getKeyCode() == KeyEvent.VK_UP){
                     UP=false;
                }
                if(e.getKeyCode() == KeyEvent.VK_DOWN){
                     DOWN=false;                    
                }
            }
            @Override
            public void keyTyped(KeyEvent e){

            }
        });

a w metodzie paint sprawdzasz, który klawisz został wciśnięty i odpowiednio przesuwasz kwadrat np:

if(RIGHT) move(x,  0);
if(LEFT) move(-x, 0);
if(UP) move(0, y);
if(DOWN) move(0, -y)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0