Paint Teilweise Zeitverzögert

Status
Nicht offen für weitere Antworten.
S

sij

Gast
Hallo

ich habe eine Spielfigur und etwas was jede Sekunde gezeichnet werden soll in einem Applet. Nun soll natürlich die Spielfigur (Image Kugel) nur eine Sleeptime von circa 25ms haben, deshalb habe ich versucht das was jede Sekunde gezeichnet werden soller per util.timer zu realisieren.... da man dafür aber immer eine 2. Klasse braucht kann ich aus irgendeinem Grund nicht die TeilPaintMethode(zeichnen()) aufrufen.... Ich hoffe ihr könnt mir helfen



Code:
import java.applet.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.util.Timer;
import java.util.TimerTask;

public class Klasse extends Applet implements Runnable, KeyListener
{
  Image kugel;
  Timer timer;

...


  private Image dbImage;
  private Graphics dbg;
  
  public void timetime(int sek) {
         timer = new Timer();
         timer.schedule(new Aufgabe(), sek,sek);
  }

....
 

      
  public void init()
  {
    resize(xbreit,(ybreit+25));
    setBackground(Color.white);
    kugel = getImage(getCodeBase(),"billardkugel.gif");
    fallen();
    addKeyListener(this);
  }

  public void start ()
  {
    Thread th = new Thread (this);
    th.start ();
  }

  public void stop()
  {

  }

  public void destroy()
  {

  }
  
  public void moveyour(){
    geschwx=0;
    if(rechts){
      geschwx=bewegspeed;
    }
    if(links){
      geschwx=-bewegspeed;
    }
    repaint();
  }
  
  public void keyPressed(KeyEvent e){
     switch(e.getKeyCode()){
       case KeyEvent.VK_LEFT : links = true; break;
       case KeyEvent.VK_RIGHT : rechts = true; break;
     }
     moveyour();
  }


  public void keyReleased(KeyEvent e) {
     switch(e.getKeyCode()){
       case KeyEvent.VK_LEFT : links = false; break;
       case KeyEvent.VK_RIGHT : rechts = false; break;
     }
     moveyour();
  }
  public void keyTyped( KeyEvent e ) {}
  
  public void fallen(){
    geschwy=-fallspeed;
  }
  
  public void beweg(){
     xball += geschwx;
     yball -= geschwy;
     if(xball <= 0){
       xball = 0;
     }
     if (xball >= xbreit-25){
       xball = xbreit-25;
     }
     if(yball <= 25){
       //gameover();
     }
     if (yball >= ybreit){
       yball = ybreit;
     }
  }

  public void run ()
  {
    Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

    while (true)
    {

      ....
      beweg();
      timetime(1000);
      repaint();

      try
      {
        Thread.sleep (25);
      }
      catch (InterruptedException ex)
      {      }

      Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    }
  }

  public void update (Graphics g)
  {
    if (dbImage == null)
    {
      dbImage = createImage (this.getSize().width, this.getSize().height);
      dbg = dbImage.getGraphics ();
    }
    dbg.setColor (getBackground ());
    dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
    dbg.setColor (getForeground());
    paint (dbg);
    g.drawImage (dbImage, 0, 0, this);
  }

  public void paint (Graphics g)
  {

    
     ......
     g.drawImage(kugel,xball,yball,this);

  }
  public void zeichnen(Graphics g){
    g.fillRect(0,8,xbreit,2);
    repaint();
  }
  class Aufgabe extends TimerTask {
         public void run() {
           Klasse.zeichnen(Graphics g); // Hier ist der Fehler

         }


     }
}

Ich hab mal Code rausgelöscht der eh nichts damit zu tun hat... Achja noch ne Frage gibt es eine Funktion die einem die Farbe zrückgibt welche eine xy Koordinate hat ?

Danke für eure Hilfe

sij
 
S

SlaterB

Gast
Aufgabe braucht eine Referenz auf das Objekt der Klasse Klasse (tolle Benennung..)

------

dein run-Thread startet anscheinend alle 25ms einen entsprechenden Task?
das geht so nicht, am besten den Task nur einmal starten,
er soll dann einmal pro Sekunde aktiv werden

-------

in deiner run-Operation machst du das ganze schon richtig:
in beweg() werden Variablen neu gesetzt, und dann einfach repaint() aufgerufen,
so muss dass bei zeichnen() auch sein,
nicht das Graphics-Objekt übergeben, welches sollte das auch sein?
nur paint() kennt das Graphics-Objekt


Code:
 timer.schedule(new Aufgabe(this), sek,sek); 


 public void zeichnen(){ 
   // setzte Information zum zeichnen in Exemplarvariablen
   repaint(); 
 } 


---------

class Aufgabe extends TimerTask { 
  Klasse k;  
  
  public Aufgabe(Klasse k) {
     this.k=k;
  }     
 
  public void run() { 
       k.zeichnen();
   } 
}
oder ähnlich
 
S

Sij

Gast
Danke für deine Hilfe! Nun stellt sich folgendes Problem: Es funktioniert zwar jetzt mit dem 1s Paint alles aber das was über den Timer gesteuert wird wird immernoch von Thread.sleep überschrieben.. Ich hoffe es gibt dafür noch eine Lösung sonst müsste ich das Programm neu umkonzipieren... ach und die Klasse heißt nicht wirklich Klasse ;)
Gibt es in so eine Methode wie ich in PS danach gefragt habe ? Hab in der API nichts gefunden
noch ein paar Codeänderungen.

Code:
public void init()
  {
    resize(xbreit,(ybreit+25));
    setBackground(Color.white);
    kugel = getImage(getCodeBase(),"billardkugel.gif");
    fallen();
    
    addKeyListener(this);
[b]    timetime(5);[/b]
  }


public void moveyour(){
    geschwx=0;
    if(rechts){
      geschwx=bewegspeed;
    }
    if(links){
      geschwx=-bewegspeed;
    }
  }


  public void zeichnen(){
   xball += geschwx;
     yball -= geschwy;
     if(xball <= 0){
       xball = 0;
     }
     if (xball >= xbreit-25){
       xball = xbreit-25;
     }
     if(yball <= 25){
       //gameover();
     }
     if (yball >= ybreit){
       yball = ybreit;
     }
  }

 }
  class Aufgabe extends TimerTask {
         GuyFallDownorDie gf;
         
         public Aufgabe(GuyFallDownorDie gf){
           this.gf=gf;
         }

         public void run() {
            gf.zeichnen();

         }


     }
}


Ach und zeichnen() und moveyour() darf kein Repaint sein sonst wird das 1s einiges schneller...

sij
 
S

SlaterB

Gast
> das was über den Timer gesteuert wird wird immernoch von Thread.sleep überschrieben

was soll einem das sagen?
das ist keine Problembeschreibung,
ich zumindest habe keinen Schimmer worum es geht

> Gibt es in so eine Methode wie ich in PS danach gefragt habe

wer oder was ist PS?

> Ach und zeichnen() und moveyour() darf kein Repaint sein sonst wird das 1s einiges schneller...

ist zwar keine Frage, aber wenn das was bedeuten soll, dann muss das wieder in verständlich formuliert werden ;)

-------

dass das Applet selber Runnable ist finde ich übrigens gar nicht gut,
mach doch lieber dann zwei Tasks, einen alle 25 ms, und einen 1s,
 
S

Sij

Gast
ja ich sehe gerade das ich mich in der Kürze nicht sorgfältig ausgedrückt habe...

durch util.timer wird ja jetzt die Bewegung der Kugel gesteuert bzw die Verzögerung doch leider wird sie immer noch verzögert nach den Regeln, die von Thread.sleep() vorgegeben werden

ps steht nicht für photoshop sonder für post scriptum leider war das nicht so in meinem ersten post so gekennzeichnet. es sollte sich hierrauf beziehen "Gibt es eine Funktion die einem die Farbe zurückgibt welche eine xy Koordinate hat, damit man daraus eine logische Bedingung stellen kann. DIes wäre eine elegante Lösung einer Kollisionsabfrage wenn alles nur Schwarz Weiß ist.


Falls zeichnen() und moveyour() den Aufruf der Methode repaint(); enthalten bezieht sich dies auf die Ganze Paint Methode und hat zur Folge, das diese wesentlich öfters aufgerufen wird als sie sollte.


Ich entschuldige mich für meinen letzten Post. Ich war beim schreiben etwas abgelenkt ;)
 
S

SlaterB

Gast
> durch util.timer wird ja jetzt die Bewegung der Kugel gesteuert
> bzw die Verzögerung doch leider wird sie immer noch verzögert
> nach den Regeln, die von Thread.sleep() vorgegeben werden

ist für mich inhaltlich genau das gleiche wie vorher,

was hat Thread.sleep() mit Regeln zu tun?, was sind überhaupt Regeln?
warum hängt irgendein Timer mit irgendeinem Thread.sleep() zusammen?,

wenn ein Thread schläft und erst danach einen Timer startet, dann ist es ja offensichtlich, dass dieser Timer vom Schlafen des Threads abhängt,
aber der Timer soll ja auch gar nicht vom Thread in jeder Runde gestartet werden sondern nur einmal am Anfang von irgendwem und dann selber weiterlaufen
(entweder kann man einstellen, dass er alle 1 Sekunde gestartet wird, oder einfach am Ende der Timer-run-Operation einen neuen Timer in Auftrag geben)

dann können andere Threads soviel schlafen wie sie wollen

------------

von der Bestimmung der Farbe weiß ich persönlich nichts,

dass mit dem repaint() denke ich nun verstanden zu haben ;)
 

LoN_Nemesis

Bekanntes Mitglied
Irgendwie verstehe ich auch nur wenig von dem Problem, aber warum machst du nicht einfach einen neuen Thread für das was nur jede Sekunde gezeichnet werden soll? Und den dann halt immer mit Thread.sleep(1000) schlafen legen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
S awt: paint Methode zeigt nichts an Java Basics - Anfänger-Themen 9
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
S Erste Schritte drawOval Problem in Paint Anwendung Java Basics - Anfänger-Themen 1
R Begrenzer Anzahl von paint() ? Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
thet1983 start & paint Methode? Java Basics - Anfänger-Themen 0
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
M Probleme mit paint() aus java.awt.Graphics Java Basics - Anfänger-Themen 2
D Wert einer Variable in paint-Methode verwenden Java Basics - Anfänger-Themen 2
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
L Paint() wird scheinbar nicht richtig ausgeführt Java Basics - Anfänger-Themen 8
N aus Container components paint Java Basics - Anfänger-Themen 2
J paint() vs repaint() Java Basics - Anfänger-Themen 3
A Problem mit paint() Java Basics - Anfänger-Themen 2
A Aufruf der paint() Methode Java Basics - Anfänger-Themen 3
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
J Problem mit paint(Graphics g) Java Basics - Anfänger-Themen 4
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
T paint() wird nicht aufgerufen Java Basics - Anfänger-Themen 2
K paint() mit einfügen Java Basics - Anfänger-Themen 14
K doppeltes paint beim Drucken Java Basics - Anfänger-Themen 8
J paint-methode blockiert settings von JComponents Java Basics - Anfänger-Themen 5
F Eine Frage über paint() Funktion Java Basics - Anfänger-Themen 2
S [Applet] Objekte von init bei paint benutzen Java Basics - Anfänger-Themen 9
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
W repaint() ruft paint() nicht auf Java Basics - Anfänger-Themen 9
J Zweimal im gleichen Paint-Fenster malen Java Basics - Anfänger-Themen 8
A paint() methode von externer Klasse aufrufen Java Basics - Anfänger-Themen 3
J Paint Methode von JPanel aufrufen Java Basics - Anfänger-Themen 15
V paint funktioniert nicht Java Basics - Anfänger-Themen 14
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
O Paint Programm mit Fehler Java Basics - Anfänger-Themen 2
A Methoden Variablen in paint methode Java Basics - Anfänger-Themen 4
K Problem mit Parameter von paint(Graphics g) Java Basics - Anfänger-Themen 3
Y im applet malen ohne repaint paint ? Java Basics - Anfänger-Themen 6
S Datentypen Paint Programm Java Basics - Anfänger-Themen 7
M paint-Methode funzt nicht Java Basics - Anfänger-Themen 11
L Paint zeichnet nicht gespeicherte Objekte Java Basics - Anfänger-Themen 3
D OOP paint() Methode aus Unterklasse anstoßen Java Basics - Anfänger-Themen 3
A paint() - warum nicht aufrufen? Java Basics - Anfänger-Themen 3
K Scrollbar - Bild - paint-Methode - zoom Java Basics - Anfänger-Themen 10
S super.paint() Java Basics - Anfänger-Themen 4
S Bild aus paint() Methode auslagern Java Basics - Anfänger-Themen 14
T Etwas an paint()-Methode übergeben? Java Basics - Anfänger-Themen 6
TheKing Paint-Methode aufrufen Java Basics - Anfänger-Themen 14
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
M Paint und JColorChooser Java Basics - Anfänger-Themen 12
G hintergrund wird nicht gezeichnet bei paint() Java Basics - Anfänger-Themen 3
H Paint Methode malt nicht im Panel Java Basics - Anfänger-Themen 4
S Frage zur paint-Methode Java Basics - Anfänger-Themen 3
B Applet: Event-Handling-Methode in start- bzw. paint-Methode Java Basics - Anfänger-Themen 7
G Nichtstatische Objekte in der paint()-Methode Java Basics - Anfänger-Themen 16
K Wieso wird "paint" nicht ausgeführt ? Java Basics - Anfänger-Themen 2
K JPanel, JFrame, paint() und wo ist mein Viereck ? Java Basics - Anfänger-Themen 19
F Frage zu JPanel und Paint Java Basics - Anfänger-Themen 5
P paint Methode Java Basics - Anfänger-Themen 3
M Problem mit paint() und Container. Java Basics - Anfänger-Themen 8
B Paint(Component) und externe Objekte Java Basics - Anfänger-Themen 6
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
F Applets und die paint-Methode Java Basics - Anfänger-Themen 3
G frage zu paint Java Basics - Anfänger-Themen 3
T Mehrere paint Methoden in unterschiedlichen Klassen Java Basics - Anfänger-Themen 7
G start-oder paint-Methode anstatt Event-Handling-Methode? Java Basics - Anfänger-Themen 3
G Hilfe in paint() ; zeichnen Java Basics - Anfänger-Themen 15
C Einfaches Paint-Programm Java Basics - Anfänger-Themen 9
T .paint() aufrufen Java Basics - Anfänger-Themen 23
R paint problem Java Basics - Anfänger-Themen 6
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
G repaint in paint aufrufen? Java Basics - Anfänger-Themen 9
V paint()-methode manuell aufrufen? kein autostart erwuenscht Java Basics - Anfänger-Themen 3
B Problem mit Einfügen von Choice (in ein Applet) aus Paint Java Basics - Anfänger-Themen 13
7 In Paint keine Schleife? Java Basics - Anfänger-Themen 13
T paint() wieder aus einder anderen methode aufrufen funzt nid Java Basics - Anfänger-Themen 2
G Paint auf Panel Java Basics - Anfänger-Themen 4
G Paint Methode löscht alles Java Basics - Anfänger-Themen 4
S paint() direkt auf JFrame seit 1.5 nicht mehr möglich? Java Basics - Anfänger-Themen 5
A Variablenübergabe in die Paint-Funktion Java Basics - Anfänger-Themen 4
D Zeichnen mit Paint zerstört ganzes Fenster Java Basics - Anfänger-Themen 5
G Klassen und paint methode Java Basics - Anfänger-Themen 2
T paint() ohne konstruktor aufzurufen? Java Basics - Anfänger-Themen 5
P paint() Java Basics - Anfänger-Themen 6
U paint Java Basics - Anfänger-Themen 8
X Malen außerhalb der paint() Methode Java Basics - Anfänger-Themen 4
C zu viele paint()'s. Java Basics - Anfänger-Themen 6
G Zeichnen ausserhalb der paint Methode Java Basics - Anfänger-Themen 4
V Problem mit der Anzeige einer paint-Methode in einem Panel Java Basics - Anfänger-Themen 2
N Probleme mit paint() bei Implementierung in ein Panel Java Basics - Anfänger-Themen 4
Dilandau paint(Graphics g) { unbekannt in try{} / catch{} }? Java Basics - Anfänger-Themen 5
D von paint() und repaint() im Applet Java Basics - Anfänger-Themen 4
C Ausgaben mit der Paint-Methode Java Basics - Anfänger-Themen 5
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
G BenutzerDaten teilweise ändern in txt Datei Java Basics - Anfänger-Themen 10
MiMa Methoden Methoden teilweise nicht gefunden? Java Basics - Anfänger-Themen 9
N Input/Output Einlesen funktioniert nur teilweise Java Basics - Anfänger-Themen 2
W Eclipse auf Linux langsam und stürzt teilweise ab Java Basics - Anfänger-Themen 2
C Graphics2D - DrawRect - Warum Linien teilweise gefüllt? Java Basics - Anfänger-Themen 12
E Methode sehr langsam und funktioniert teilweise nicht Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben