repaint oder update Methode?

Status
Nicht offen für weitere Antworten.
D

dark_angel

Gast
Ich versuche gerade ein Frogger Spiel zu programmieren und bin soweit, dass ich den Frosch am unteren Bildrand "sitzen" habe. Jetzt möchte ich, dass er sich, wenn ich bspw. die Pfeiltaste nach oben drücke, nach oben "bewegt". Ich habe bisher 2 Klassen, einen Frame und einen Canvas... Ich dachte mir nun es wäre sinnvoll einfach die Y-Position des Bildes (des Frosches) mit der entsprechenden set-Methode zu verändern wenn die Taste gedrückt wird und es dann neu darstellen zu lassen... Aber welche Methode brauche ich dazu, repaint oder update und wo genau müsste ich die hinschreiben?
 
B

Beni

Gast
Code:
Canvas froschZeichnung = ...
froschZeichnung.repaint();
 
D

dark_angel

Gast
Hm, so in etwa hatte ich mir das auch gedacht, aber dann muss der Fehler wohl wo anders liegen :( ... Also compilieren tut er es ohne Fehlermeldung, der Frosch bleibt halt nur da wo er ist...

Vielleicht ist hier ja irgendein elementarer Fehler ;)...?:

Code:
...
public void keyTyped(KeyEvent e)
  {
          if(e.getKeyCode() == e.VK_KP_UP)
          {
                  up();
                  bild1.repaint();
          }
  }

  
  public static void up()
 {
           ImageCanvas.setYPos1(20);
           
  }
...



Code:
...
public static void setYPos1(int value)
  {
            yPos1 = yPos1+value;
         
  }
...
 
B

Beni

Gast
Öhm, wieso verwendest du "static"? Erscheint mir nicht sehr sinnvoll (um nicht zu sagen, total unsinnvoll).

Aber dann versuch doch mal: frame.repaint();
Und schreib in der paint-Methode ein System.out.println ( yPos1 ) (wenn sich die Ausgabe nicht verändert...)
Falls das Progi nicht allzuviel Code hat, kannst du hier auch ein bisschen mehr posten.

mfg Beni
 
D

dark_angel

Gast
Ich hab static genommen, weil er mir ohne sonst immer Fehlermeldungen angezeigt hat, so hats jetzt zumindest beim Compilieren erstmal geklappt...

Ok, ich poste mal den gesamten Code wenn das ok ist! Und danke für die Hilfe!
Code:
import java.awt.*;
import java.awt.event.*;


public class ImageFrame extends Frame implements KeyListener
{
        ImageCanvas bild1;

        class MeinWindowListener extends WindowAdapter {

                public void windowClosing(WindowEvent e) {
                        exitProgram();
                }
        }

        public void keyPressed(KeyEvent e) {}

        public void keyReleased(KeyEvent e) {}

        public void keyTyped(KeyEvent e) {
                if (e.getKeyCode() == e.VK_KP_UP) {
                        up();
                        bild1.repaint();
                }
        }

        public static void up() {
                ImageCanvas.setYPos1(20);
        }

        ImageFrame() {
      
                super();

                setTitle("Frogger!");

                setBackground(Color.blue);

                setSize(700, 500);

                initLayout();

                addWindowListener(new MeinWindowListener());

                setVisible(true);
        }


        protected void initLayout() {

                setLayout(new BorderLayout());
        
                ImageCanvas bild1 = new ImageCanvas(50, 50, "Frosch.gif",
                        Color.black);
                add("South", bild1);               
       }

        void exitProgram() {
                dispose();
                System.exit(0);
        }
 
        public static void main(String args[]) {
                 new ImageFrame();
        }
  }

Code:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;

public class ImageCanvas extends Canvas
{

        protected String bilddatei;
        protected Image bild1;
        protected static int xPos1, yPos1;
        protected int width, height;
       
        public ImageCanvas(int w, int h, String datei, Color bc) {
                width = w;
                height = h;
                bilddatei = datei;
                
                setBackground(bc);
               
                xPos1 = 300;
                yPos1 = -10;

                loadImage();
        }
       
        private void loadImage() {
           
                Toolkit tk = getToolkit();
               
                bild1 = tk.getImage(bilddatei);

                MediaTracker mt = new MediaTracker(this);
                
                mt.addImage(bild1, 0);

               
                try {
                        mt.waitForAll();
                } catch (InterruptedException e) {}
        }
        
        public void paint(Graphics g) {
                
               g.drawImage(bild1, xPos1, yPos1, this);
        }
       
        
        public int getYPos1() {
                return yPos1;
        }

        public static void setYPos1(int value) {
                yPos1 = yPos1 + value;

        }
        
       public Dimension getPreferredSize() {
                return new Dimension(width, height);
        }

        public Dimension getMinimumSize() {
                return new Dimension(width, height);
        }

        public Dimension getMaximumSize() {
                return new Dimension(width, height);
        }
      
}
 
B

Beni

Gast
Huii, da sind aber noch ein paar Dinge komisch...

1. KeyListener implementieren ist schon gut, aber addKeyListener hast Du vergessen. (gleich beim Frame und bei dem ImageCanvas)
2. keyTyped wird nicht bei jedem Key aufgerufen (nur Buchstaben, Zahlen, ...). Also muss der Aufruf von up() entweder in keyPressed oder keyReleased erfolgen (pressed fände ich besser).
3. Je grösser y wird, desto tiefer kommt der Frosch zu liegen (wegen dem Koordinatensystem). Also nenn die Methode down und nicht up :wink:
4. VK_KP_UP ist für das Nummerfeld, VK_UP für die Pfeiltasten. War das Absicht?
5. nicht ImageCanvas bild1 = new ImageCanvas(50, 50, "Frosch.gif",Color.black); sondern nur bild1 = new ImageCanvas(50, 50, "Frosch.gif",Color.black);
Ansonsten ist die globale Variable bild1 == null, und das wird Probleme geben.
6. nicht ImageCanvas.setYPos1(20); sondnern bild1.setYPos1(20); (hier darf bild1 nicht null sein :wink: ), und dann kannst du alle "static" löschen.

mfg Beni
 
D

dark_angel

Gast
Ohja, jetzt wo du es sagst wird da einiges logischer :wink:!! Habs jetzt so versucht und es klappt, DANKE!!!

1.Hatte ich natürlich völlig vergessen *SchandeübermeinHaupt*
2.Ok, das wusste ich jetzt nicht, hatte mir nur kurz die API durchgelesen und es einfach damit versucht...
3.Hatte völlig verdrängt, dass oben links ja 0/0 ist und nicht unten, ups 8)...
4.Ja, wusste ich, war mir aber fürs erste egal, Hauptsache es klappt erstmal...
und 5. und 6., da ging mir jetzt endlich mal ein Licht auf warum das alles so komisch war;)!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
? AWT Translucent JFrame mit repaint Allgemeine Java-Themen 4
C MouseListener und Repaint() Allgemeine Java-Themen 6
L repaint() methode funktioniert nicht richtig! Allgemeine Java-Themen 3
M repaint() wird nicht ausgeführt Allgemeine Java-Themen 5
T Zugriff zwischen Klassen für repaint Allgemeine Java-Themen 7
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
1 TextArea: Repaint zu spät Allgemeine Java-Themen 4
T Java 8 Security Update Allgemeine Java-Themen 3
krgewb Darstellung bei Java-Update Allgemeine Java-Themen 8
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
B Umgebungsvariable Anpassen der Umgebungsvariablen nach Java-Update ? Allgemeine Java-Themen 14
S Java-Webstart und Update-Checks Allgemeine Java-Themen 0
A Update Software programmieren Allgemeine Java-Themen 1
T Nach Java Update: Jar Datein öffnen sich nicht mehr mit doppelklick Allgemeine Java-Themen 3
G JavaFX Problem nach Update auf Java 8 Allgemeine Java-Themen 0
E Java 7 update 51 Allgemeine Java-Themen 9
H SHA256 update-Funktion Allgemeine Java-Themen 3
F.S.WhiTeY JDK installieren Linux: Nach Update link auf Java zerschossen Allgemeine Java-Themen 4
eskimo328 Swing Client Anwendung für MAC OS (Update Routine) Allgemeine Java-Themen 6
L Launche update Allgemeine Java-Themen 19
D Update von TimerTask Allgemeine Java-Themen 13
X Update einer Jar während der Laufzeit Allgemeine Java-Themen 8
J Eigenes Produkt Upgrade / Update-fähig halten? Allgemeine Java-Themen 16
S iText PDF - Verständnisproblem beim Update von TableCells (Seitenzahlen) Allgemeine Java-Themen 2
D Updaten von Klassen durch jar.exe zerstört diese. Update durch WinRAR gelingt! Allgemeine Java-Themen 2
T Update eines Programms - Beenden eines anderen Prozesses überwachen Allgemeine Java-Themen 8
D Java Update automatisieren Allgemeine Java-Themen 4
H SQL Update "Rückgabe der DB als String?" Allgemeine Java-Themen 7
X HTTP Problem mit static/non static JTextArea Update Allgemeine Java-Themen 17
S eigene Update Funktion Allgemeine Java-Themen 5
martin82 Java Runtime Update >17 - SwingWorker Änderungen? Allgemeine Java-Themen 7
M jdesktop binding: jTable update nach Änderung... Allgemeine Java-Themen 3
B Regex-Fehler nach lib-Update Allgemeine Java-Themen 2
H Probleme! Mac Os und Java Update Allgemeine Java-Themen 3
R JAR-Update in laufender Applikation Allgemeine Java-Themen 9
A Hilfe mit 2-dimensionalem array ***UPDATE*** Allgemeine Java-Themen 27
Kr0e JCE doFinal/update Allgemeine Java-Themen 2
MQue update/paint Allgemeine Java-Themen 7
L Java6 update N bekommt neues Browser-Plugin, bitte testen. Allgemeine Java-Themen 7
O App Update Allgemeine Java-Themen 3
T NullPointerException nach Java Update Allgemeine Java-Themen 4
V Update des JAR-Archivs Allgemeine Java-Themen 5
M Update auf netbeans 6Beta 1 Allgemeine Java-Themen 2
U Programm soll sich nach update neustarten Allgemeine Java-Themen 30
M Tool zum autom. Client-Update Allgemeine Java-Themen 2
C Java SE Runtime 6 Update 1 - IE 7 und FF 2.0 - Allgemeine Java-Themen 6
M Frage zu update Methode von Observer! Allgemeine Java-Themen 40
K Regex Versucher 2 *Update - sinnvoll und schön* :) Allgemeine Java-Themen 6
T update() wird bei Programmstart und resize nicht gemacht Allgemeine Java-Themen 4
R Browser-Problem nach Java-Update Allgemeine Java-Themen 9
B statusbar update -> mit thread oder listener? Allgemeine Java-Themen 7
D wie update-erinnerung der jre deaktivieren? Allgemeine Java-Themen 6
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben