Forum zamknięte. Zapraszamy do grupy na Facebooku
Odpowiedz 
 
Ocena wątku:
  • 1 Głosów - 5 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z płynnością animacji
04-28-2013, 01:28 PM
Post: #1
Problem z płynnością animacji
Dzieńdoberek!

Po dość długiej przerwie w programowaniu, postanowiłem wrócić i na początku napisać prostą animację (działam na Ubuntu 12.04 LTS). Wszystko ładnie pięknie, kulka lata, odbija się, ale nie jest płynna. Bawiłem się oczywiście delayem i długością ruchu na jedną klatkę - nie pomogło. Zauważyłem jednak, że płynność jest doskonała kiedy ruszam kursorem nad okienkiem, które napisałem. Załączam kompletny kod, dobrze by było go przetestować na Windowsie, żebym wiedział, czy problem jest po stronie kodu, czy systemu.

Kod:
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;

public class App extends JFrame{

    JLabel version;
    
    public App() {
        setSize(500, 400);
        setVisible(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Animacja");
        version = new JLabel("  v0.1_28_4");
        add(version, BorderLayout.SOUTH);
    }
    public static void main(String[] args) {
        App start = new App();
        Anim anim = new Anim();    
        start.getContentPane().add(anim);
        anim.startAnim();
    }

}


Kod:
import java.awt.*;
import javax.swing.*;

public class Anim extends JPanel {

        //srednica
        int dim = 50;
        //polozenie
        int x = 75, y = 75;
        //kierunek ruchu
        int dx = 3, dy = 5;
        //opoznienie odswiezania
        int delay = 10;
        
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
            
            g2d.setColor(Color.red);
            g2d.drawOval(x, y, dim, dim);
        }
        
        public void startAnim() {
            while(true) {
                //odbicie
                if(x + dim > getWidth() || x < 0)
                    dx = -dx;
                if(y + dim > getHeight() || y < 0)
                    dy = - dy;
                //przesuniecie
                
                x += dx;
                y += dy;
                
                repaint();
                
                try{
                    Thread.sleep(delay);
                } catch(InterruptedException e) { }
            }
        }
}
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
04-29-2013, 09:14 AM
Post: #2
RE: Problem z płynnością animacji
Ok, poradziłem sobie dzięki pewnej pomocy, ale jakby ktoś miał taki sam problem, to już mówię, co trzeba zrobić. No więc wystarczy dodać do metody paintComponent() linijkę:

Kod:
Toolkit.getDefaultToolkit().sync();
I po wszystkim Big Grin
Znajdź wszystkie posty użytkownika
Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości