Płynne chodzenie

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.

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)

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