Ich brauche eine Idee: Animation mit teil eines Bildes

sambacket

Mitglied
Guten Abend,

Folgendes: Ich habe eine Animation erstellt, die halt sehr stark flackert. Das Problem bei dieser Animation ist, dass ich die Bilder nicht im Vorfeld laden kann und so das System mit dem Dubblebuffer nicht einsetzen kann.

Animation:

Ich habe ein 2Dspiel, wo eine Umgebungs-Karte als Jpeg vorliegt. Meine Figur befindet sich in der Mitte des Bildschirms. Nun wird, im Hintegrund, immer nur der Teil der Karte(vom Jpeg) geladen, wo die Figur sich grad aufhält...

Das habe ich ganz einfach mit g2d.draw gelöst....Es gibt die Option Teilbereiche eines Bildes zu zeichnen...Wie kann ich es nun umsetzen, dass die Animation, sprich das Neuladen der Karte nicht flackert.

1.update überschreiben funzt nicht, da er die updatefunktion nicht aufruft.
2. animation hab ich mit threads gelöst

Bitte eine Idee..

Danke

Sam
 

Guybrush Threepwood

Top Contributor
Versuche es mit VolatileImages und setze die Regionen, in den gezeichnet wird mit setClip möglichst klein, sodass nur kleine Teile des Bildes neu gezeichnet werden müssen. Das Problem dabei wird möglicherweise sein, dass die VolatileImages keinen Alpha-Kanal haben. In diesem Fall würde ich zumindest die Karte als VolatileImage halten und das, was Du darüber zeichnest als BufferedImage darüber zeichnen.
 
Zuletzt bearbeitet:

jemandzehage

Aktives Mitglied
Also ich bräuchte noch ein paar Informationen:
1) Mit welchen Klassen arbeitest du? Wo wird gezeichnet. JPanel oder Canvas?
2) Was wird denn genau animiert? Die Figur? Oder meinst du mit Animation nur die Map, die sich verschiebt. (Oder hat die Animationen wie Wasser etc. ? )
3) Wieso muss das Bild im vorfeld geladen sein, damit du es mit einem DoubleBuffer verwenden kannst??

Also die einfachste Lösung (und auch die gängigste) ist ein Doppel Puffer, mit dem du Zeichnest. Am einfachsten in einem Canvas mit einer BufferStrategy. Du kannst natürlich auch in einem JPanel zeichnen. Da kannst du den Doppel Puffer aktivieren ( oder ist er glaube ich standartmäßig )
 

sambacket

Mitglied
Zur näheren Beschreibung habe ich noch ein BIld entworfen..Siehe Anhang


Es ist grad ganz schön wichtig, da ich Montag ne Abgabe hab

Danke
 

Anhänge

  • ansicht.jpeg
    ansicht.jpeg
    24,3 KB · Aufrufe: 39

sambacket

Mitglied
Bei jeden Neuzeichnen:

Java:
public void paint(Graphics g) {
   g2d.drawImage(img, 0, 40, 400, 440, p.getX()-212, p.getY()-192, p.getX()+189, p.getY()+208, null);
}

Ich zeichne quasi das Bild neu.Eeinen Ausschnitt aus dem Bild:

Geladen habe ich es in der init() methode des applets:

Java:
ImageIcon i = new ImageIcon(Pfad);
img = i.getImage();
 

jemandzehage

Aktives Mitglied
mh. die idee ist eigentlich richtig. das flackern kommt daher, das dein bild im applet erst gelöscht wird und dann neu gezeichnet wird. und da dein pc nicht unendlich performance hat, flackert es dann, weil ein gelöschter Bildschirm einfach weiß ist. Die frage ist, wie rufst du in deinem Thread auf, dass gezeichnet werden soll? Bestimmt mit repaint(); Weil wenn du repaint aufrufst, wird automatisch auch update() aufgerufen. Die Methode müsste dann folgendermaßen aussehen:
Java:
/** Update - Methode, Realisierung der Doppelpufferung zur Reduzierung des Bildschirmflackerns */
public void update (Graphics g)
{

      // Initialisierung des DoubleBuffers
      if (dbImage == null)
      {
            dbImage = createImage (this.getSize().width, this.getSize().height);
            dbg = dbImage.getGraphics ();
      }

      // Bildschirm im Hintergrund löschen
      dbg.setColor (getBackground ());
      dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

      // Auf gelöschten Hintergrund Vordergrund zeichnen
      dbg.setColor (getForeground());
      paint (dbg);

      // Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
      g.drawImage (dbImage, 0, 0, this);

}

Und warum lädst du die Bilder nicht mit
Java:
Applet.getImage (Applet.getCodeBase (), "image.jpg");

Oder zeichnest du mit einer anderen Graphickomponente??
 

sambacket

Mitglied
Das mit dem Update probier ich:

Als Grafikobjekt nehm ich ein ImageIcon

Java:
ImageIcon i = new ImageIcon(this.getCodeBase().getPath()+"zusegame/Bilder/museum_neu.jpg");
img = i.getImage();

Wenn ich es mit mit deinen Vorschlag probiere

Java:
Image img;
img = Applet.getImage (Applet.getCodeBase (), "image.jpg");

sagt er mir...


non-static method getCodeBase() cannot be referenced from a static context
Image img = Applet.getImage (Applet.getCodeBase (), "image.jpg");
 

Marco13

Top Contributor
In dem Applet kannst du das "Applet" durch "this" ersetzen.

Abgesehen davon: Wenn du ein JApplet verwendest, erübrigt sich das ganze: Bei Swing ist DoubleBuffering schon eingebaut....
 

sambacket

Mitglied
Ja ich benutze ein JApplet.

hab jetzt auch die Update methode eingebaut, aber leider spricht er die Methode nicht an.

Aber wenns schon eingebaut ist...was dann..wie bekomm ich das flackern weg..

Das war ja mein Problem..
 

sambacket

Mitglied
Fertig..obwohl er bei dem Beispiel..irgendwie die Grafik nur anzeigt, wenn ich die Größe des Applet verändere. In meinem Programm funzt es auf diese Weise..halt nur mit Flackern.

Aber man trotzdem erkennen, wie die Animation läuft

Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JApplet;


public class NewJApplet extends JApplet implements Runnable {

  
    Image umgebung,spieler;
    Point spielerpos = new Point(540,440);
    
    public void init() {

        // TODO start asynchronous download of heavy
        ImageIcon i = new ImageIcon("Umgebung.jpg");
        umgebung = i.getImage();
        ImageIcon j = new ImageIcon("Figur.png");
        spieler = j.getImage();
       

          Thread th = new Thread(this);
         th.start();
    }

    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
         g2d.drawImage(spieler,200,200,null);
         g2d.drawImage(umgebung, 0, 0, 400, 400, spielerpos.x-200, spielerpos.y-200, spielerpos.x+200, spielerpos.y+200, null);
         spielerpos.x= spielerpos.x+10;

    }
     
    public void run(){

          //neu pinseln
            repaint();
            try {
                Thread.sleep(100); //Päuschen
            } catch (InterruptedException ex) {}
        
        }
    public void start(){

          run();
        }


  
}
 

Marco13

Top Contributor
Besser?
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.JApplet;


public class NewJApplet extends JApplet implements Runnable {


    Image umgebung,spieler;
    Point spielerpos = new Point(540,440);


    class ImagePanel extends JPanel
    {
        public void paintComponent(Graphics g)
        {
            Graphics2D g2d = (Graphics2D) g;
             g2d.drawImage(spieler,200,200,null);
             g2d.drawImage(umgebung, 0, 0, 400, 400, spielerpos.x-200, spielerpos.y-200, spielerpos.x+200, spielerpos.y+200, null);
             spielerpos.x= spielerpos.x+10;
        }
    }

    public void init() {

        // TODO start asynchronous download of heavy
        ImageIcon i = new ImageIcon("circleImage01.jpg");
        umgebung = i.getImage();
        ImageIcon j = new ImageIcon("circleImage02.jpg");
        spieler = j.getImage();

        setLayout(new GridLayout(1,1));
        add(new ImagePanel());

          Thread th = new Thread(this);
         th.start();
    }


    public void run()
    {
        while (true)
        {
          //neu pinseln
            repaint();
            try {
                Thread.sleep(100); //Päuschen
            } catch (InterruptedException ex) {}

        }
    }



}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
White_Fox JavaFX CSS und Vererbung - ich brauche nochmal etwas Nachhilfe AWT, Swing, JavaFX & SWT 28
J 2D-Grafik Brauche Erklärung von Methode AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
V Swing Brauche Hilfe mit Label AWT, Swing, JavaFX & SWT 3
K Swing Brauche Hilfe AWT, Swing, JavaFX & SWT 6
O AWT Performance und Bug behebung[brauche Hilfe] AWT, Swing, JavaFX & SWT 2
D Ambitioniertes Projekt - Brauche Stichworte AWT, Swing, JavaFX & SWT 4
D Swing Wozu brauche ich getContentPane()? AWT, Swing, JavaFX & SWT 2
L Mein Kopf dreht sich... Brauche Hilfe beim GUI gestalten AWT, Swing, JavaFX & SWT 10
J Brauche ganz dringend Hilfe!!! AWT, Swing, JavaFX & SWT 5
S Brauche genaustes Verstaendnis ueber JTextField AWT, Swing, JavaFX & SWT 3
M brauche Hilfe um Einträge aus Jlist zu löschen AWT, Swing, JavaFX & SWT 4
W Brauche Swing-Experten AWT, Swing, JavaFX & SWT 4
P Welchen Listener brauche ich? AWT, Swing, JavaFX & SWT 7
G Welche Swing-Version brauche ich . AWT, Swing, JavaFX & SWT 6
S Wann brauche ich die prepareRenderer() Methode ? AWT, Swing, JavaFX & SWT 2
D Brauche einfachen HTML Editor AWT, Swing, JavaFX & SWT 2
M Ich habe Werte und Brauche Grafik! AWT, Swing, JavaFX & SWT 3
G Leider trotz allem kein Icon :( Brauche Hilfe AWT, Swing, JavaFX & SWT 3
G Selbstprogrammierter Editor - brauche Hilfe AWT, Swing, JavaFX & SWT 5
M Brauche nur den Pfad zum Speichern AWT, Swing, JavaFX & SWT 8
M Brauche Hilfe zum Einbinden von eigener Schrfitart AWT, Swing, JavaFX & SWT 3
S Brauche Hilfe mit JFrame - NullPointerException AWT, Swing, JavaFX & SWT 7
K Ich brauche GridBagLayout Hilfe AWT, Swing, JavaFX & SWT 4
S Frame, brauche dringend hilfe AWT, Swing, JavaFX & SWT 4
M Konsolenprg-Ausgabe in GUI geleitet - Brauche ich Threads? AWT, Swing, JavaFX & SWT 2
N ProgressBar --> brauche Hilfe AWT, Swing, JavaFX & SWT 4
N Brauche Layout-Hilfe AWT, Swing, JavaFX & SWT 3
N Brauche Layout Hilfe AWT, Swing, JavaFX & SWT 9
Z Bei Problem mit Java Swing brauche dringende Hilfe AWT, Swing, JavaFX & SWT 3
O Brauche ich einen neuen Frame? AWT, Swing, JavaFX & SWT 2
V Brauche Hilfe beim Steuern des Sichtbereiches eines JPanel AWT, Swing, JavaFX & SWT 2
D Zoom problem!!! (brauche screenshot...) plz help thx AWT, Swing, JavaFX & SWT 7
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
mrbody234 ArrayList<Message> in eine TableView visualisieren AWT, Swing, JavaFX & SWT 2
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
Lukas2904 Wie speicher ich eine Einstellung? AWT, Swing, JavaFX & SWT 1
T Getter und Setter für eine Stage AWT, Swing, JavaFX & SWT 6
P Zwei JTables auf eine A4-Seite mit einstellbaren Rändern AWT, Swing, JavaFX & SWT 9
Monokuma 2D-Grafik Imageimport durch eine gezeichnete Form ersetzen AWT, Swing, JavaFX & SWT 16
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
F Variablen an eine Form binden? AWT, Swing, JavaFX & SWT 2
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
White_Fox JavaFX Warum kriege ich eine Exception? AWT, Swing, JavaFX & SWT 23
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
Informatiknoob AWT Zahlenraten (eine Zahl zwischen 1 und 10) AWT, Swing, JavaFX & SWT 1
A eine Fehler AWT, Swing, JavaFX & SWT 9
TheJavaKid Auf eine Zeichnung im Canvas reagieren AWT, Swing, JavaFX & SWT 13
A JavaFX Daten in eine HTML-Table mit JS schreiben AWT, Swing, JavaFX & SWT 3
B JavaFX TableView eine Zeile markieren AWT, Swing, JavaFX & SWT 5
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
J JavaFX Die Webview stellt eine Webseite nicht dar AWT, Swing, JavaFX & SWT 0
M JavaFX Ein Labeltext eine zeitlang anzeigen dann weiter machen AWT, Swing, JavaFX & SWT 3
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
Thallius Swing JDatePicker oder Sucht jemand eine Aufgabe? AWT, Swing, JavaFX & SWT 0
K Wie kann ich eine Variable zwischen Tab Klassen weitergeben ? AWT, Swing, JavaFX & SWT 7
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
A JFace Wizard: Ist es möglich eine Page zu löschen? AWT, Swing, JavaFX & SWT 2
L Swing Wie programmiere ich eine eigene GUI? AWT, Swing, JavaFX & SWT 12
M Combo Box auswahl in eine Datenbank speichern AWT, Swing, JavaFX & SWT 1
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
D AWT Das ganze GUI in eine Klasse? AWT, Swing, JavaFX & SWT 1
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
U LookAndFeel für eine Komponente AWT, Swing, JavaFX & SWT 2
E Mit Netbeans von einer Form auf eine Komponente einer anderen Form zugreifen AWT, Swing, JavaFX & SWT 2
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
M Über eine JMenuBar überprüfen ob ein JCheckBoxMenuItem selectiert ist. AWT, Swing, JavaFX & SWT 4
M Wie kann ich eine an Apple Automator angelehnte GUI erstellen? AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen


Oben