BufferedImages verschieben klappt nicht

Status
Nicht offen für weitere Antworten.

unknown_member

Bekanntes Mitglied
Hi!

Das ist wirklich nervig...
Ich sitz jetzt schon...seit so 2 Wochen am gleichen Problem:

Ich möchte meiner "Spielfigur", einem BufferedImage, eine Sprungfunktion adden. Das mache ich mit einer Variable, die beim zeichnen des Images eingebaut ist. Ich wollte das so machen:
Erst ziehe ich von der Variable etwas ab, warte dann und ziehe wieder was ab usw... Aber wenn ich zB zuerst 3 subtrahiere, warte und dann zB 4 addiere, wird eine Weile gewartet und das Bild ein Pixel nach unten gesetzt. Das Ergebnis. Aber dazwischen passiert nichts.

Um das zu lösen, hab ich eine neue Klasse erstellt, doch das hat irgendwie nie geklappt, immer irgendwelche Probleme :wink:

Dann hab ich noch mit Threads rumprobiert und was weiß ich noch alles gemacht. Nie hats geklappt, klar, sonst würd ich hier nichts schreiben... :D



Vllt kann mir hier irgendjemand helfen, eine Idee würde schon reichen.. Falls nötig, poste ich auch gerne Code



thx, unknown_member, das Fragezeichengesicht :D
 
G

Guest

Gast
unknown_member hat gesagt.:
Aber wenn ich zB zuerst 3 subtrahiere, warte und dann zB 4 addiere, wird eine Weile gewartet und das Bild ein Pixel nach unten gesetzt. Das Ergebnis. Aber dazwischen passiert nichts.

naja du musst dann auch das bild neuzeichnen wenn du die position verändert hast, was du ja anscheinend erst am ende deiner sprungaktion machst
 

Chris_1980

Bekanntes Mitglied
poste mal was code, ich hatte mal was ähnliches. repaint() wird scheinbar erst ausgeführt, wenn der Thread aus nem Keylistener o.Ä. zurück ist.
Habe das dann umgangen, indem ich das in nem anderen Thread aufgerufen hab.
 

unknown_member

Bekanntes Mitglied
Ich führe repaint() immer nachdem ich irgendwas gemacht aus.

Bei nem Tastendruck führe ich dann immer die betreffende Klasse aus.



Hier der Code:


Die Nebenklasse Move:

Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
import java.net.*;
import java.io.File;
import java.awt.image.*;
import javax.imageio.*;


class Move extends Xtreme
   implements ActionListener, MouseListener, KeyListener {
   
   boolean               bLeft = false;
   boolean              bRight = false;
   
   Move() {
   makeGui();
   addKeyListener(this);
   }

   
   public void makeGui() {
   
   
  }    
   public void actionPerformed(ActionEvent event) { }
   
   
    
    
   public void mouseEntered(MouseEvent ev) { }
    
   public void mouseExited(MouseEvent ev) { }
    
   public void mouseClicked(MouseEvent ev) {
   
   }
   
   public void handleMouseEvent(MouseEvent ev){ }


   
   public void keyPressed(KeyEvent ev) {
   

  }
  
  public void bLeft() {
   location-=5;
   repaint();
  }
   
   
   
   public void mousePressed(MouseEvent ev) { }
   public void keyTyped(KeyEvent ev) { }
   public void keyReleased(KeyEvent ev) { }
   public void mouseReleased(MouseEvent ev) { }
   
   public static void main (String[] args) {
   }
    
}



Die Hauptklasse Xtreme:


Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
import javax.imageio.*;


public class Xtreme extends JFrame
   implements ActionListener, MouseListener, WindowListener, KeyListener {

   JPanel               game;
   JPanel                set;

   JButton              ende;

   BufferedImage              player;
   BufferedImage          background;
   BufferedImage                jump;
   ImageIcon           close;

   int                location = 100;
   int                  height = 400;
   

   public static void main(String [] args) throws IOException {

    Xtreme go = new Xtreme();
    go.setTitle("Volleyball X-treme");
    go.setSize(Toolkit.getDefaultToolkit().getScreenSize());
	go.setUndecorated(false);  //Wenn fertig programmiert und getestet, auf true setzen
    go.setCursor(CROSSHAIR_CURSOR);
	go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	go.setResizable(false);
	go.setVisible(true);
    }


	Xtreme() {
    makeGui();
    addWindowListener(this);
	addKeyListener(this);
	}


   public void makeGui() {
   
   game = new JPanel();
   set  = new JPanel();
   
   
   close = new ImageIcon( "close.gif" );
   
   
	try {
     background = ImageIO.read(new File("Background_Street.gif"));
	 player     = ImageIO.read(new File("player_one.gif"));
	 jump       = ImageIO.read(new File("Jump.gif"));
     }
     catch(IOException e) {
     e.getMessage();
     }

}

   public void paint(Graphics g) {
    super.paint(g);
    g.drawImage(background, 0, 0, this);
	g.drawImage(player, location, height, this);
   }
   

   public void keyReleased(KeyEvent ev) { }
   public void actionPerformed(ActionEvent event) { }
   public void mouseEntered(MouseEvent ev) { }
   public void mouseExited(MouseEvent ev) { }
   public void mouseClicked(MouseEvent ev) { }
   public void mouseReleased(MouseEvent ev) { }
   public void mousePressed(MouseEvent ev) { }
   public void windowOpened(WindowEvent e) { }
   public void windowIconified(WindowEvent e) { }
   public void windowClosed(WindowEvent e) { }
   public void windowActivated(WindowEvent e) { }
   public void windowDeiconified(WindowEvent e) { }
   public void windowDeactivated(WindowEvent e) { }
   
   
   public void warten()
   {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {}
   }
   
   

   
   
   public void windowClosing(WindowEvent e) { }
   

   
   public void keyPressed(KeyEvent ev) {



   if (ev.getKeyCode() == KeyEvent.VK_UP) {

    Move.bLeft();  //Hier klappts schon nicht...

    }
    
	catch(IOException e) {
     e.getMessage();
    }
   
}

   if (ev.getKeyCode() == KeyEvent.VK_LEFT && location != 15) {
	  
    location-=5;
	repaint();
	
   }
   
   if (ev.getKeyCode() == KeyEvent.VK_RIGHT && location != 400) {
	  
   location+=5;
   repaint(); 
   
   }
   
   
   }
   public void keyTyped(KeyEvent ev) { }
 }
 

Chris_1980

Bekanntes Mitglied
Also... du hast schon ne merkwürdige Klassenteilung, aber zum Thema.



Hier kannst du dir n kleines Beispiel angucken, wie so ne kleine animation funktioniert. Wenn du dazu fragen hast, frag, ist nicht grade das was man unter "Sauber kommentierter Code" versteht. :D

Vieleicht hilft dir das ja weiter.

Wenn du´s trotzdem anders machen willst, also so zB.:
Code:
// Nicht funktionierender Code:
	if (ev.getKeyCode() == KeyEvent.VK_LEFT && location != 15) 
	{ 

		for(int i=0; i<5 ; i++)
		{
			location -= 5; 
			repaint(); 
			try { Thread.sleep(50); } catch(InterruptedException e) {}

		}

	}
... funktioniert das nicht. Es wird erst gezeichnet wenn der EventThread returned ist.

das müßte dann so erfolgen:
Code:
	if (ev.getKeyCode() == KeyEvent.VK_LEFT && location != 15) 
	{ 
		new Thread(new Runnable()
		{
			public void run()
			{
				for(int i=0; i<5 ; i++)
				{
					location -= 5; 
					repaint(); 
					try { Thread.sleep(50); } catch(InterruptedException e) {}

				}
			}
		}).start();

	}


MFG, Chris
 

Chris_1980

Bekanntes Mitglied
welche Javaversion benutzt du denn? Kann sein das des mit 1.6 compiliert ist. Entweder du machst n update, oder du löschst die classFiles und compilierst es mit deinem Compiler neu. :wink:
 
G

Gast

Gast
also deine Move Klasse kannst du ja irgendwie komplett rauslöschen, was soll die überhaupt? Wieso erweitert die deine Xtreme Klasse? du rufst nur einmal eine static Methode daran auf die aber garnicht static ist. Es ist alles sehr wirr ;)
 

L-ectron-X

Gesperrter Benutzer
unknown_member hat gesagt.:
Exception in thread "main" java.lang.NoSuchMethodError: main
Entweder hast du eine falsche Methodensignatur für die main()-Methode, oder du hast eine Klasse ohne main()-Methode als Main-Class in deinem Projekt spezifiziert.
 

unknown_member

Bekanntes Mitglied
Jep, das klappt. Aber ich weiß leider immer noch nicht, wie das puffern funktioniert... :cry:

Vllt würde mir ein KSBK helfen :wink: Das hat mir bis jetzt immer weitergeholfen...
 

unknown_member

Bekanntes Mitglied
Vielleicht...

Eine kleine Applikation, in der ein Quadrat dem Cursor folgt, natürlich doppelgepuffert. Alles ganz einfach. Wär echt nett, wenn auch an den relevanten Stellen ein wenig auskommentiert wäre... :wink:
 

WieselAc

Top Contributor
So hier hast du dein Maus Quadrat:

Code:
public class Temp extends JFrame {

    private static Cursor buildMovePieceCursor() {
        // Cursor image erzeugen
        BufferedImage image = new BufferedImage(10, 10,
                BufferedImage.TYPE_INT_RGB);
        // Graphics Objekt zu zeichnen holen
        Graphics g = image.getGraphics();
        // Frabe setzten
        g.setColor(Color.MAGENTA);
        // etwas rummalen
        g.fillRect(0, 0, image.getWidth(), image.getHeight());
        // Zeichnen beenden
        g.dispose();
        // Toolkit holen
        Toolkit tk = Toolkit.getDefaultToolkit();
        // Zeiger erstellen
        return tk.createCustomCursor(image, new Point(10, 10), "pieceCursor");
    }


    public static void main(String[] args) {
        // Instanzieren
        JFrame tmp = new Temp();
        // Schließbar machen
        tmp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Größe setzten
        tmp.setPreferredSize(new Dimension(200, 200));
        // Cursor erzeugen und setzten
        tmp.setCursor(buildMovePieceCursor());
        // Frame packen
        tmp.pack();
        // Frame zentrieren
        tmp.setLocationRelativeTo(null);
        // Fraem sichtbar machen
        tmp.setVisible(true);
    }

}
 

unknown_member

Bekanntes Mitglied
Das gibt bei mir 13 Fehler. Schätze mal, das mit dem JFrame adden hat nicht geklappt.


Sieht ungefähr so aus:

Exception2.GIF
 

Tobias

Top Contributor
Ähem, so ein paar import-Statement solltest du vielleicht schon hinzufügen vor dem Ausführen...

mpG
Tobias
 

WieselAc

Top Contributor
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

EDIT: Eigentlich hat Tobis recht und ich sollte den Post hier löschen, aber ich will nitt so sein und hoffe du legst dir bald mal eine zu.

PS: Du machst GUI Programmierung ohen IDE und weißt nicht in welchem Package JFrame ist?!? seltsam seltsam...
 

unknown_member

Bekanntes Mitglied
Oh nein! Ein Fehler von mir. Ich habe nähmlich noch ein Problem mit dem Doppelpuffern, das ich jetzt verwechselt habe. Aber auf das Prob braucht ihr nicht eingeben. Meine Frage war ja eigentlich:

So richtig verschoben wird ein BufferedImage da ja nicht, oder?
 

WieselAc

Top Contributor
Nö jedenfalls nicht von dem Code der da steht. Das passiert intern bei der Maussteuerung.

Aber für das von dir geschilderte Problem das ein kleines Bild der Maus folgen soll, ist das meiner Meinung nach die beste Lösung.
 

unknown_member

Bekanntes Mitglied
Ja, das ist es auf jedenfall. Aber wie der Threadtitel schon sagt, möchte ich die Bilder (die BufferedImages) zB 3 Pixel nach oben, warten, und dann wieder 2 nach unten verschieben, was nicht geht.

(Siehe Post mit Code)
 
G

Gast

Gast
Chris_1980 hat dir doch ein bisschen beispielcode gegeben wie das aussehen könnte

wo ist denn jetzt dein konkretes problem?
 

unknown_member

Bekanntes Mitglied
Oh mein gott! Chris' Code kann einwandfrei, was ich wollte!

Es tut mir wirklich leid, liebes Forum... :oops:


Naja, ok, entschuldigung


Aber trotzdem vielen vielen Dank für die Antwort!!! :applaus: :applaus: :applaus:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Schandro RTF Document mit BufferedImages erstellen Java Basics - Anfänger-Themen 3
U Fehler bei BufferedImages Java Basics - Anfänger-Themen 3
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 17
S Input/Output JLabel verschieben Java Basics - Anfänger-Themen 7
L Files verschieben in einen Ordner Java Basics - Anfänger-Themen 87
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
CptK Methoden JLabel erstellen & verschieben Java Basics - Anfänger-Themen 1
H Position verschieben der Elemtente im Array Java Basics - Anfänger-Themen 3
K Einzelne Email verschieben nicht möglich Java Basics - Anfänger-Themen 3
A Dateien Verschieben Java Basics - Anfänger-Themen 1
T Arrayposition um eine Position verschieben Java Basics - Anfänger-Themen 2
B Element in Array nach unten verschieben Java Basics - Anfänger-Themen 11
M Best Practice Verschieben einzelner Spalten eines JTables verhindern Java Basics - Anfänger-Themen 5
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
M Elemente eines Arrays verschieben Java Basics - Anfänger-Themen 9
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
L Punkt innerhalb eines Bereiches verschieben Java Basics - Anfänger-Themen 9
H Kreis verschieben Java Basics - Anfänger-Themen 10
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
J Java Array Zeichnung Skalieren und verschieben Java Basics - Anfänger-Themen 5
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
llabusch Fenster per Button verschieben Java Basics - Anfänger-Themen 5
llabusch Fenster um x Pixel verschieben Java Basics - Anfänger-Themen 4
M JButtons verschieben Java Basics - Anfänger-Themen 13
J Array um 1 stelle verschieben Java Basics - Anfänger-Themen 2
B Fehlerhafte XML-Files verschieben Java Basics - Anfänger-Themen 6
T Verschieben Java Basics - Anfänger-Themen 4
B Dateien Verschieben! Java Basics - Anfänger-Themen 8
B ältere Dateien verschieben Java Basics - Anfänger-Themen 3
Q Komma verschieben Java Basics - Anfänger-Themen 5
J Markierte Items in einer JLIST in einen Ordner verschieben Java Basics - Anfänger-Themen 2
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
N Array inhalte verschieben Java Basics - Anfänger-Themen 12
B Methode in andere Klasse verschieben Java Basics - Anfänger-Themen 9
T JScrollPane: Slider programmgesteuert verschieben? Java Basics - Anfänger-Themen 4
GianaSisters Erste Schritte Datei umbennen bzw verschieben klappt nicht Java Basics - Anfänger-Themen 6
0 Datei verschieben Java Basics - Anfänger-Themen 6
R Verschieben eines Arrays aus Objekten Java Basics - Anfänger-Themen 16
eLogic Datei verschieben Java Basics - Anfänger-Themen 12
M Kommastellen verschieben Java Basics - Anfänger-Themen 4
R Objekt mit Maus auswählen und verschieben Java Basics - Anfänger-Themen 2
L Datei verschieben mit einer Schleife Java Basics - Anfänger-Themen 17
Hamstinator Fenster mit Maus verschieben Java Basics - Anfänger-Themen 2
K Elemente eines Array verschieben Java Basics - Anfänger-Themen 18
U Arry verschieben Java Basics - Anfänger-Themen 2
J Datentypen Array in x Richtungen verschieben Java Basics - Anfänger-Themen 6
E Probleme mit Images verschieben Java Basics - Anfänger-Themen 4
K Punkte verschieben Java Basics - Anfänger-Themen 6
S Grosse Dateien kopieren/Verschieben Java Basics - Anfänger-Themen 14
D denkfehler, bereich verschieben awt Java Basics - Anfänger-Themen 3
D Dateien umbenennen --> verschieben Java Basics - Anfänger-Themen 4
Mike90 verschieben von Buttons, ... Java Basics - Anfänger-Themen 18
D Elemente im Array verschieben Java Basics - Anfänger-Themen 15
M Referenzen verschieben Java Basics - Anfänger-Themen 2
B zahlen verschieben tabelle Java Basics - Anfänger-Themen 2
H Objekt mit Maus verschieben Java Basics - Anfänger-Themen 4
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
J Datei verschieben funktioniert nicht Java Basics - Anfänger-Themen 6
M Verzeichnis verschieben Java Basics - Anfänger-Themen 5
G Ordner überprüfen und Dateien verschieben Java Basics - Anfänger-Themen 3
L Verzeichnisse mit Inhalt verschieben auf UNIX Java Basics - Anfänger-Themen 5
Silas89 Datei verschieben Java Basics - Anfänger-Themen 3
K bestimmte Dateien aus Ordner verschieben Java Basics - Anfänger-Themen 5
X Dateien Verschieben Java Basics - Anfänger-Themen 8
M JList Parameter verschieben Java Basics - Anfänger-Themen 3
M Parameter zwischen zwei JLists verschieben Java Basics - Anfänger-Themen 4
G dateien verschieben Java Basics - Anfänger-Themen 10
D JTable - Verschieben der Spalten deaktivieren <- wie? Java Basics - Anfänger-Themen 5
0 Element aus Array löschen andere Elemente verschieben? Java Basics - Anfänger-Themen 7
G Array verschieben Java Basics - Anfänger-Themen 9
R mit MouseDragged Rechteck verschieben. Java Basics - Anfänger-Themen 2
I "File" - je nach änderungsdatum verschieben Java Basics - Anfänger-Themen 5
A MP3-Datei verschieben Java Basics - Anfänger-Themen 6
C Focus fürs Zeichnen verschieben?? Java Basics - Anfänger-Themen 3
A Programm in den Hintergrund "verschieben" Java Basics - Anfänger-Themen 4
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
F jsoup einloggen klappt nicht Java Basics - Anfänger-Themen 10
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
nbergmann Umgebungsvariablen einstellen unter Windows 7 klappt nicht Java Basics - Anfänger-Themen 2
C Erste Schritte Insert Into klappt nicht Java Basics - Anfänger-Themen 6
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
L Resourcen laden klappt nicht Java Basics - Anfänger-Themen 2
L Variablen Einheiten umrechen klappt nicht Java Basics - Anfänger-Themen 16
I Schleifendurchlauf ab 2. Durchlauf klappt nicht Java Basics - Anfänger-Themen 10
J Objecte in TreeSet einfügen klappt nicht Java Basics - Anfänger-Themen 5
J Datei auslesen klappt nicht Java Basics - Anfänger-Themen 4
K Methoden Pause drücken klappt nur jedes 2. Mal Java Basics - Anfänger-Themen 6
S UserPref und Java Application klappt immer nicht. Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
S clip.loop(Clip.LOOP_CONTINUOUSLY); stoppen klappt nicht! Java Basics - Anfänger-Themen 11
Z Lotto-Programm Wieso klappt das? Java Basics - Anfänger-Themen 8
J Erste Schritte Zweithöchster Wert eines Arrays herausfinden - warum klappt mein Code nicht? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben