Animation malen!

Status
Nicht offen für weitere Antworten.

Hutmacher

Bekanntes Mitglied
Hallo. Ich bin gerade etwas stark verwirrt ...
wie realisiere ich es, ein Strichmännchen zu malen, das sich bewegt?
Java:
class StrichmaennchenFrame extends JFrame
{
    @Override
    protected void paintComponent(Graphics g)
    {
        drawStrichmaennchenNormal(g);
        warten(200);
        drawStrichmaennchenArmRaus(g);
        warten(200);
        drawStrichmaennchenSprung(g);
        warten(200);
    }

    private void drawStrichmaennchenNormal(Graphics g)
    {
       //hier wird das Strichmaennchen im Stehen auf g gedrawt 
    }

    private void drawStrichmaennchenArmRaus(Graphics g)
    {
       //hier wird das Strichmaennchen mit Arm raus auf g gedrawt 
    }

    private void drawStrichmaennchenSprung(Graphics g)
    {
       //hier wird das Strichmaennchen im Sprung auf g gedrawt 
    }

    private void warten(int millisekunden)
    {
        try
        {
             Thread.sleep(millisekunden);
        } catch (Exception e) { }
    }
}

Das ist jetztmal ein zusammengebasteltes Test-Beispiel, da meines zu komplex ist.
Die Mal-Implementierung funktioniert mit den 3 Methoden, aber hier wird nichts als Animation dargestellt. Ich sehe nach 3x200 Millisekunden nur alle Images übereinander.
 

javimka

Top Contributor
So geht das leider nicht, du hast das Prinzip von Swing noch nicht ganz durchschaut. Wenn du ein Befehl wie drawIrgendwas aufrufst, wird das nie auch sofort auf dem Bildschirm gezeichned. Erst, wenn alles "fertig gezeichnet ist", also die Methode wieder verlassen wurde, wird das gezeichnete sichtbar. Deswegen sind Befehle, wie warte/sleep o.ä. auch strengstens verboten in solchen paint-Methoden.

Ganz einfach lässt sich deine Animation nicht umschreiben. Am besten, du erstellst einen javax.swing.Timer, der alle 200ms ein ActionEvent feuert und einen ActionListener ausführt. Dieser müsste dann dem JPanel oder was du hast, befehlen, sich neu zu zeichnen (repaint()).

die paint-Component dieses JPanels müsste dann wissen, welche von deinen drei draw-Methoden aufgerufen werden soll. Das kannst du relativ simpel mit einer int Variable realisieren, die einfach um eines erhöht wird, wenn eine Methode ausgeführt wurde. Wenn du vor jedem neu zeichnen, das ganze Panel löschen willst, rufe super.paintComponent(g) auf.
Wenn die Animation vorbei ist, sollte der Timer unbedingt gestoppt werden, damit der nicht ewig weiter Events abfeuert.

Vorbeugend: Verwende nicht getGraphics() ! ;)
 

Marco13

Top Contributor
Um das bestehende Programm nicht zuu viel ändern zu müssen: Man könnte sowas ganz grob so machen:
Java:
class StrichmaennchenFrame extends JFrame
{
    private int zustand = 0;
    public void animationStarten()
    {
        zustand = 0;
        Thread t = new Thread(new Runnable()
        {
            public void run()
            {
                for (int i=0; i<3; i++)
                {
                    zustand++;
                    repaint();
                    warten();
                }
            }
        });
        t.start();
    }


    @Override
    protected void paintComponent(Graphics g)
    {
        if (zustand == 0)  drawStrichmaennchenNormal(g);
        if (zustand == 1)  drawStrichmaennchenArmRaus(g);
        if (zustand == 2)  drawStrichmaennchenSprung(g);
    }

Ist aber nicht wirklich sauber... lies' dir mal sowas wie Painting in AWT and Swing und vielleicht Threads and Swing durch...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Animation/links-rechts Java Basics - Anfänger-Themen 9
G Animation Timer Nano Time Java Basics - Anfänger-Themen 2
J Animation eines Körpers auf der schiefen Ebene Java Basics - Anfänger-Themen 11
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
D Animation JPanel Java Basics - Anfänger-Themen 1
WetWer Animation JLabel Java Basics - Anfänger-Themen 2
A Animation einer Zahnradpumpe Java Basics - Anfänger-Themen 6
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
K Möglichkeiten um eine einfache Animation darzustellen Java Basics - Anfänger-Themen 7
C Animation nur einmal durchführen Java Basics - Anfänger-Themen 3
N Bilderarray als animation ablaufen lassen?? Java Basics - Anfänger-Themen 6
G Threads SuM Class Animation Java Basics - Anfänger-Themen 13
J .gif Animation Java Basics - Anfänger-Themen 4
J Animation Java Basics - Anfänger-Themen 5
M Animation in einem Multiplayerspiel Java Basics - Anfänger-Themen 3
S Animation nach bestimmter Zeit ausführen Java Basics - Anfänger-Themen 3
T Animation Java Basics - Anfänger-Themen 2
M Animation von Kreisen Java Basics - Anfänger-Themen 15
U Y-Animation Java Basics - Anfänger-Themen 3
K Animation: Ball fällt herunter Java Basics - Anfänger-Themen 2
G Zufalls Animation Java Basics - Anfänger-Themen 9
Luk10 einfach animation Java Basics - Anfänger-Themen 2
S JTable mit Animation??? Java Basics - Anfänger-Themen 7
B Flash Animation SWF in Java absielen Java Basics - Anfänger-Themen 18
R Probleme mit Animation und der erstellung einer jar Datei. Java Basics - Anfänger-Themen 11
U Animation bleibt leer (weiß) Java Basics - Anfänger-Themen 5
T Animation übermalt panels Java Basics - Anfänger-Themen 6
M Simple Animation funktioniert nicht (JFrame, Canvas, Thread) Java Basics - Anfänger-Themen 6
S Desktop Animation Java Basics - Anfänger-Themen 15
T Abspeichern einer Animation in *.bmp Java Basics - Anfänger-Themen 12
K animation in applet, thread problem (?) Java Basics - Anfänger-Themen 3
K Animation warten lassen Java Basics - Anfänger-Themen 9
F Animation Java Basics - Anfänger-Themen 3
J Animation Java Basics - Anfänger-Themen 2
J Auf einem JLabel Linien Malen Java Basics - Anfänger-Themen 1
ben0376 Gesicht malen Java Basics - Anfänger-Themen 6
T Einen Stern malen Java Basics - Anfänger-Themen 32
T Einen Stern malen Java Basics - Anfänger-Themen 2
I In der Mitte eines Frames mit BorderLayout etwas malen Java Basics - Anfänger-Themen 7
L Tetris-Segment "malen" Java Basics - Anfänger-Themen 7
J Zweimal im gleichen Paint-Fenster malen Java Basics - Anfänger-Themen 8
Y im applet malen ohne repaint paint ? Java Basics - Anfänger-Themen 6
B polyline auf buffered image malen Java Basics - Anfänger-Themen 2
U PPM Datei in jPanel malen Java Basics - Anfänger-Themen 4
G Auf ein Panel malen Java Basics - Anfänger-Themen 16
G mit paint() ins JPanel malen. Java Basics - Anfänger-Themen 6
M Auf Panels oder Labels malen? (paint) Java Basics - Anfänger-Themen 9
X Malen außerhalb der paint() Methode Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben