JAVA Hilfe

Hier kann über alles diskutiert werden, wirklich alles. Betonung liegt auf "diskutiert", das ist also kein Freischein zum Spammen.
(Beitragszähler deaktiviert)
Gesperrt
mephi
Wächter des Vulkans
Beiträge: 327
Registriert: 28. Jun 2004, 11:45

JAVA Hilfe

Beitrag von mephi » 4. Mai 2006, 14:23

hi hab n prob mit java und awt
kennt sich damit einer aus?

hab eine methode die etwas zeichnet, aber nie aufgerufen wird. zumindest net in dem code den ich vorliegen habe. also nehm ich mal an die wird in einem package oder so aufgerufen. aber müsste verstehn wie damit ich mit der arbeiten kann

Code: Alles auswählen

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Panel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;

public class GamePanel extends Panel implements KeyListener {
..
.
.

public void update(Graphics g) {
    paint(g);
  }
..
.
.

hier mal der komplette code

Code: Alles auswählen

mport java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Panel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;

public class GamePanel extends Panel implements KeyListener {
  
	// Die müsst ihr programmieren ;)
	boolean run=true;
	Spieler s1 = new Spieler();
  
  
  // Double Buffering
  BufferedImage buf;
  Graphics2D g2d;
  
  // fürs merken der Tasteneingaben
  boolean p1up = false, p1down = false;
  boolean p2up = false, p2down = false;

  public GamePanel() {
    this.setBackground(Color.black);
    this.addKeyListener(this);
  }
  
  public void update(Graphics g)
  {
    paint(g);
  }
  
  public void paint(Graphics g)
  {
    if (buf == null)
    {
      buf = new BufferedImage(this.getSize().width,this.getSize().height,BufferedImage.TYPE_INT_ARGB);
      g2d = (Graphics2D) buf.getGraphics();
    }
    s1.paint(g);
    
    
    
    // diese Zeile kopiert euer fertiges Bild auf den Bildschirm -> kein Flackern
    g.drawImage(buf,0,0,buf.getWidth(),buf.getHeight(),this);
  }
  
  public void gameLoop() throws InterruptedException{
	  while(run){
		  s1.coordX++; // nur zum testen
		  Thread.sleep(100);
		  
	  }
  }

  public void keyPressed(KeyEvent e) {
    // flags auf true setzen
  }

  public void keyReleased(KeyEvent e) {
    // flags auf false setzen
  }

  public void keyTyped(KeyEvent e) {
    // ignorieren ;P
  }
}

Code: Alles auswählen

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MainFrame extends Frame {
  
  GamePanel p = new GamePanel();
  
  public MainFrame()
  {
    this.setSize(840,640);
    this.setTitle("Wer das liest ist doof");
    this.setResizable(false);
    this.setAlwaysOnTop(true);
    this.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e)
      {
        System.exit(0);
      }
    });
    this.add(p);
    this.setVisible(true);
  }

  public static void main(String[] args) {
    MainFrame f = new MainFrame();
  }

}
Bild

Benutzeravatar
Prinegon
großer Laubbär
Beiträge: 2585
Registriert: 14. Mär 2005, 07:53

Beitrag von Prinegon » 5. Mai 2006, 22:46

Um deine Frage mal zu beantworten, überschreibt die update-Methode deines Programmes jene, die das Objekt durch Component ererben würde. Wann die Methode aufgerufen wird, wird für dich nicht sonderlich wichtig sein, geh einfach davon aus, der Aufruf erfolgt immer automatisch, wenn sich an deinem Panel etwas ändern würde (denn dafür ist die Methode da, es wird das Panel neu gezeichnet, wann auch immer es not tut).
update soll dafür sorgen, daß ein Bildschirmelement relativ flackerfrei neugezeichnet werden kann, indem es, anstatt den ganzen Bildschirm zu löschen, nur den Bereich löscht, der von diesem Element belegt wird und dann das Element dort neu hinzeichnet.
Die Standardmethode wurde überschrieben. In deinem Panel wird es wahrscheinlich nicht nötig sein, vor dem Neuzeichnen erst den Bereich zu löschen, somit wurde das löschen eingespart und update läuft, wie im Kommentar geschrieben, flackerfrei. Das funktioniert natürlich nur dann, wenn es nicht passieren kann, daß Teile deines Panels nicht neugezeichnet werden, die hinterher zu sehen wären.

Wenn du mehr wissen willst, schau mal hier:http://www.addisonwesley.de/Service/Kru ... tm#E14E128
Das Gegenteil von "gut" ist "gut gemeint".
Bild Bild Bild
Es ist nur Sand. Doch manchmal kann auch Sand töten...

Benutzeravatar
Miro
Gelbbart-Yeti
Beiträge: 2260
Registriert: 10. Nov 2003, 15:39
Wohnort: Im Göttertempel gleich rechts
Kontaktdaten:

Beitrag von Miro » 26. Mai 2006, 18:58

ruf in der gameLoop() repaint() auf.
Bild On the road to world domination.
Wer mir glaubt ist selber schuld .)
Desweiteren habe ich hier nix zu sagen.

mephi
Wächter des Vulkans
Beiträge: 327
Registriert: 28. Jun 2004, 11:45

Beitrag von mephi » 13. Jun 2006, 09:01

Ich danke euch für die hilfe.. hab das ganze nun geschmissen und mit openGL und der lwjgl angefangen.. klappt wunderbar nur hab ich nun ein problem mit openAL.. kennt sich damit jemand aus?
Bild

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste