1. Menüleiste wird doppelt gezeichnet 2. awt auf ein jpanel

Status
Nicht offen für weitere Antworten.

MiniDirk

Mitglied
Hallo zusammen,

Ich bin dabei als kleine Projektarbeit für die Uni ein BAP-Spiel zu schreiben, dabei habe 2 Probleme die ich leider durch suchen hier im Forum auch nicht gelösst bekomme:

Mein erster Versuche des Spiels habe ich im AWT geschrieben, da gibt es 3 Klassen: Balken, Ball und Spiel. Spiel ist für den Spielablauf da und bei den anderen beiden wird der Ball und der Balken definiert. Ist sicherlich noch ausbaufähig aber es bewegt sich schon mal.

Jetzt möchte ich das ganze in SWING schreiben (BAP_Spiel) und habe da schon einige Menüs etc. gemacht. Das klappt auch soweit. Da dachte ich mir ich mache ein Jpanel wo ich das eigentliche Spiel drin läuft. (Spielfeld).

Jetzt habe ich ein Panel gemacht und wenn ich das Programm startet zeichnet er mir die Menüleiste doppelt. Warum?

Und wäre ich für ein Tipps wie meine erste Version auf das JPanel bekomme sehr dankbar.

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt wo ich mein Problem habe.

Danke schon mal für die Hilfe



Hier ist die AWT Version die ich gerne als JPanel haben möchte:
Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;

public class Spiel extends Canvas {
  public static final int breite = 800, hoehe = 600, pause = 1, schlaegerBreite = 50, schlaegerHoehe = 12,schlaegerOben=545;

  public int mausX,mausY,mausTaste, anzahlTreffer=0;
  
  public boolean balkenTreffer = false;

  public final int anzahlBalkenSpalten = 14,anzahlBalkenReihen = 2;
  
  public BufferStrategy strategy;
  
  Ball ball;
  Balken balkenReihe[][] = new Balken[anzahlBalkenReihen][anzahlBalkenSpalten];

  public Spiel() {

    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    Frame fenster = new Frame();

    fenster.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });

    fenster.add(this);

    addMouseMotionListener(new MouseMotionListener() {
      public void mouseDragged(MouseEvent e) {
        
      }

      public void mouseMoved(MouseEvent e) {
        mausX = e.getX();
        mausY = e.getY();

      }
    });

    fenster.setTitle("BAP - Spiel");
    fenster.setSize(breite+7, hoehe+33);
    fenster.setBackground(Color.black);
    fenster.setLocation((d.width - fenster.getWidth()) / 2,
        (d.height - fenster.getHeight()) / 2);
    fenster.setResizable(false);
    fenster.setVisible(true);
  
    ball = new Ball(180,180,10);
    ball.setSpeedX(1);
    ball.setSpeedY(1);
    
    for (int i = 1; i < anzahlBalkenReihen; i++) {
      for (int j = 1; j < anzahlBalkenSpalten; j++){
        balkenReihe[i][j] = new Balken((j-1) * 60 + 14,150 - (i * 20),Color.red);
      }
    }
    
    
    createBufferStrategy(2);
    strategy = getBufferStrategy();
  }

  public void zeichneSpielfeld() {
    Graphics g = strategy.getDrawGraphics();

    g.setColor(getBackground());
    g.fillRect(0, 0, getWidth(), getHeight());
    
    
    
    ball.paint(g);
    
    for (int i=1;i<anzahlBalkenReihen;i++){
      for (int j=1;j<anzahlBalkenSpalten;j++){
        if (balkenReihe[i][j].getGetroffen() == false){ 
          balkenReihe[i][j].paint(g);
        }
      }
    }
    
    g.setColor(Color.gray);
    g.fill3DRect(mausX - schlaegerBreite/2, schlaegerOben, schlaegerBreite, schlaegerHoehe, true);
    g.drawString("Treffer: " + anzahlTreffer,10,580);
    strategy.show();
  }

  public void updateFenster() {
    
    ball.bewegen(balkenTreffer);
    balkenTreffer = false;
    ball.testeObSchlaegerGetroffen(schlaegerOben,schlaegerOben+schlaegerHoehe,mausX - schlaegerBreite/2,mausX + schlaegerBreite/2);
    

    for (int i=1;i<anzahlBalkenReihen;i++){
      for (int j=1;j<anzahlBalkenSpalten;j++){
      if (balkenReihe[i][j].getGetroffen() == false){
        balkenReihe[i][j].pruefeTreffer(ball.getBallX(),ball.getBallY(),ball.getBallRadius());
        if (balkenTreffer == false){
          balkenTreffer = balkenReihe[i][j].getGetroffen();
          if (balkenTreffer == true){anzahlTreffer++;}
        }
      }
      }
    }
    
  }

  public void game() {
    while (isVisible()) {
      updateFenster();
      zeichneSpielfeld();

      try {
        Thread.sleep(pause);
      } catch (InterruptedException e) {

      }
    }
  }

  public static void main(String[] args) {

    Spiel bap = new Spiel();
    bap.game();
  }
}


Die Balken:
Code:
import java.awt.*;

public class Balken {

  // Variablen
  private int balkenX; // x - Position des Balken
  private int balkenY; // y - Position des Balken
  private static final int balkenBreite = 50; // Balkenbreite
  private static final int balkenHoehe = 12; // Balkenhoehe
  private Color c;
  private boolean getroffen = false;

  Balken(int balkenX, int balkenY, Color c) {

    this.balkenX = balkenX;
    this.balkenY = balkenY;
    this.c = c;

  }

  public void pruefeTreffer(int ballX, int ballY, int ballRadius) {
    
    int ballOben = ballY - ballRadius;
    int ballUnten = ballY + ballRadius;
    int ballLinks = ballX - ballRadius;
    int ballRechts = ballX + ballRadius;
    
    if (((ballOben <= balkenY + balkenHoehe) && (ballUnten >= balkenY) ) && ((ballLinks <= balkenX + balkenBreite) && (ballRechts >= balkenX))){
      getroffen = true;
    }
    

  }
  
  public boolean getGetroffen(){
    return getroffen;
  }

  public void paint(Graphics g) {

    if (getroffen == false) {
      g.setColor(c);
      g.fill3DRect(balkenX, balkenY, balkenBreite, balkenHoehe, true);
    }
    if (getroffen == true) {
      g.setColor(Color.black);
      g.fill3DRect(balkenX, balkenY, balkenBreite, balkenHoehe, true);
    }
  }
}

Und der Ball

Code:
import java.awt.*;

public class Ball {

  // Variablen
  private int ballX; // x - Position des Balles
  private int ballY; // y - Position des Balles
  private int ballRadius; // Ballradius
  private int speedX; // Geschwindigkeit in x - Richtung
  private int speedY; // Geschwindigkeit in y - Richtung
  private boolean balkenTreffer;

  // Positionen
  private int ballOben; // Obergrenze des Balles
  private int ballUnten; // Untergrenze des Balles
  private int ballLinks; // Linke Grenze des Balles
  private int ballRechts; // Rechte Grenze des Balles

  //?
  private int schlaegerOben; // Oberkante des Schlägers
  private int schlaegerUnten; // Unterkante des Schlägers
  private int schlaegerLinks; // Linke Grenze des Schlägers
  private int schlaegerRechts; // Rechte Grenze des Schlägers


  public Ball(int ballX, int ballY, int ballRadius) {
    this.ballX = ballX;
    this.ballY = ballY;
    this.ballRadius = ballRadius;
      }

  public void setSpeedX(int speedX) {
    this.speedX = speedX;
  }

  public void setSpeedY(int speedY) {
    this.speedY = speedY;
  }

  public void bewegen(boolean balkenTreffer) {
    this.balkenTreffer = balkenTreffer;
    ballX += speedX;
    ballY += speedY;
    istBallOut();   
  }

  public void istBallOut() {
    // Ball bewegt sich nach links
    if (speedX < 0) {
      if (ballX < ballRadius) {
        // Geschwindigkeit umdrehen
        speedX = -speedX;
      }
    }
    // Ball bewegt sich nach rechts
    else if (speedX > 0) {
      if (ballX > Spiel.breite-ballRadius) {

        // Geschwindigkeit umdrehen
        speedX = -speedX;
      }
    }

    // Ball bewegt sich nach oben
    if (speedY < 0) {
      if ((ballY < 0+ballRadius) || (balkenTreffer == true)) {
        speedY = -speedY;
      }
    }
    // Ball bewegt sich nach unten
    else if (speedY > 0) {
      if ((ballY > Spiel.hoehe-ballRadius) || (balkenTreffer == true)) {
        speedY = -speedY;
      }
    }
  }

  public void testeObSchlaegerGetroffen (int schlaegerOben, int schlaegerUnten,int schlaegerLinks, int schlaegerRechts) {
    
    // Initialisierung der momentanen Positionen des Schlägers
    
    this.schlaegerOben = schlaegerOben;
    this.schlaegerUnten = schlaegerUnten;
    this.schlaegerLinks = schlaegerLinks;
    this.schlaegerRechts = schlaegerRechts;

    // Initialisierung der Ballpositionen
  
    ballOben = ballY - ballRadius;
    ballUnten = ballY + ballRadius;
    ballLinks = ballX - ballRadius;
    ballRechts = ballX + ballRadius;

    if ((ballX >= schlaegerLinks) && (ballX <= schlaegerRechts) && (ballUnten >= schlaegerOben) && (ballUnten<=schlaegerUnten)){
      speedY = -speedY;
    
    }

  }

  public void paint(Graphics g) {
    g.setColor(Color.blue);
    g.fillOval(ballX - ballRadius, ballY - ballRadius, 2 * ballRadius,
        2 * ballRadius);
  }

  public int getspeedX() {
    return speedX;
  }

  public int getspeedY() {
    return speedY;
  }

  public int getBallX() {
    return ballX;
  }

  public int getBallY() {
    return ballY;
  }

  public int getBallRadius() {
    return ballRadius;
  }
}



Das ist die Swing Version mit den ganzen Menüs

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 11.11.2006
  * @author
  */

public class BAP_Spiel extends JFrame {
  // Anfang Variablen
  private JMenuBar jmb_menu = new JMenuBar();
  private JMenu jmu_Spiel = new JMenu("Spiel");
  private JMenuItem SpielJMenuItem1 = new JMenuItem("Neu");
  private JMenuItem SpielJMenuItem2 = new JMenuItem("Beenden");
  private JMenu jmu_Level = new JMenu("Level");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem1 = new JRadioButtonMenuItem("Level 1");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem2 = new JRadioButtonMenuItem("Level 2");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem3 = new JRadioButtonMenuItem("Level 3");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem4 = new JRadioButtonMenuItem("Level 4");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem5 = new JRadioButtonMenuItem("Level 5");
  private JMenu jmu_Highscore = new JMenu("Highscore");
  private JMenuItem HighscoreJMenuItem1 = new JMenuItem("Anzeigen");
  private JMenuItem HighscoreJMenuItem2 = new JMenuItem("löschen");
  private JMenu jmu_Hilfe = new JMenu("Hilfe");
  private JMenuItem HilfeJMenuItem1 = new JMenuItem("Hilfe");
  private JMenuItem HilfeJMenuItem2 = new JMenuItem("Info");
  private ButtonGroup LevelRadioButton = new ButtonGroup();
  public Spielfeld SpielFeldBAP = new Spielfeld();
  public static int mausX,mausY;
  // Ende Variablen

  public BAP_Spiel(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    addMouseMotionListener(new MouseMotionListener() {
      public void mouseDragged(MouseEvent e) {

      }

      public void mouseMoved(MouseEvent e) {
        mausX = e.getX();
        mausY = e.getY();

      }
    });
    int frameWidth = 800;
    int frameHeight = 600;

    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);

    //SpielFeldBAP.setDoubleBuffered(true);
    Container cp = getContentPane();
    cp.add(SpielFeldBAP);


    // Anfang Komponenten

    setJMenuBar(jmb_menu);
    jmb_menu.add(jmu_Spiel);
        SpielJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        SpielJMenuItem1ActionPerformed(evt); } });
    jmu_Spiel.add(SpielJMenuItem1);
    jmu_Spiel.addSeparator();
    SpielJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        SpielJMenuItem2ActionPerformed(evt); } });
    jmu_Spiel.add(SpielJMenuItem2);
    //Hier wird definiert das die Levelauswahl gruppiert wird sprich immer nur eine Auswahl möglich
    LevelRadioButton.add(LevelJRadioButtonMenuItem1);
    LevelRadioButton.add(LevelJRadioButtonMenuItem2);
    LevelRadioButton.add(LevelJRadioButtonMenuItem3);
    LevelRadioButton.add(LevelJRadioButtonMenuItem4);
    LevelRadioButton.add(LevelJRadioButtonMenuItem5);
    // ENde der definition
    jmb_menu.add(jmu_Level);
    LevelJRadioButtonMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem1ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem1);

    LevelJRadioButtonMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem2ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem2);

    LevelJRadioButtonMenuItem3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem3ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem3);

    LevelJRadioButtonMenuItem4.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem4ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem4);

    LevelJRadioButtonMenuItem5.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem5ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem5);

    jmb_menu.add(jmu_Highscore);
    HighscoreJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem1ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem1);
   jmu_Highscore.addSeparator();
    HighscoreJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem2ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem2);
    
    jmb_menu.add(jmu_Hilfe);
        HilfeJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HilfeJMenuItem1ActionPerformed(evt); } });
    jmu_Hilfe.add(HilfeJMenuItem1);
    jmu_Hilfe.addSeparator();
    HilfeJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HilfeJMenuItem2ActionPerformed(evt); } });
    jmu_Hilfe.add(HilfeJMenuItem2);

    // Ende Komponenten



    setResizable(false);
    //setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void SpielJMenuItem1ActionPerformed(ActionEvent evt) {

  }
  public void SpielJMenuItem2ActionPerformed(ActionEvent evt) {
    DialogBeenden DialogEnde = new DialogBeenden(this,"Ende?",true);
  }
  public void LevelJRadioButtonMenuItem1ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem2ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem3ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem4ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem5ActionPerformed(ActionEvent evt) {
    DialogName DialogNameEingeben = new DialogName(this,"Herzlichen Glückwunsch!",true);
  }
  public void HighscoreJMenuItem1ActionPerformed(ActionEvent evt) {
     DialogHighscore DialogHiscoreAnzeigen = new DialogHighscore(this,"Die TOP 10",true);
  }
  public void HighscoreJMenuItem2ActionPerformed(ActionEvent evt) {
    DialogHighscoreLoeschen DialogHL = new DialogHighscoreLoeschen(this,"Löschen?",true);
  }
  public void HilfeJMenuItem1ActionPerformed(ActionEvent evt) {
    DialogHilfe DialogHilfeAnzeigen = new DialogHilfe(this,"Anleitung",true);
  }
  public void HilfeJMenuItem2ActionPerformed(ActionEvent evt) {
    DialogInfo DialogInfoAnzeigen = new DialogInfo(this,"Info",true);
  }
  // Ende Ereignisprozeduren
  
  public void spielAblauf(){
    while (isVisible()){

    SpielFeldBAP.repaint();
    }
  }
  public static void main(String[] args) {
    BAP_Spiel spiel = new BAP_Spiel("BAP Spiel von Bejer / DeLiello / Krieger / Küls");
    spiel.spielAblauf();


  }
}


Das Spielfeld hier soll das Spiel drin laufen:

Code:
import java.awt.*;
import javax.swing.*;


class Spielfeld extends JPanel {

    @Override
    protected void paintComponent(Graphics g){
    super.paintComponents(g);
    g.fill3DRect(BAP_Spiel.mausX,BAP_Spiel.mausY,20,20,true);
    g.setColor(Color.red);
    g.drawLine( 10, 10, 100, 50 );
 

MarcoBehnke

Bekanntes Mitglied
was meinst Du mit doppelt? Übereinander? Kannst Du einen Screenshot erstellen. Der Code sieht soweit in Ordnung aus.

Canvas erbt von Component und ist somit eine. D.h. du kannst Dein Spiel direkt in das JPanel adden.

in BAP_Spiel also per

Spiel myspiel = new Spiel();
getContentPane().setLayout(new BorderLayout());
getContentPane().add(myspiel);
 

L-ectron-X

Gesperrter Benutzer
Canvas ist eine AWT-Komponente!
AWT und Swing sollten nicht gemischt werden, dann kann es zu solchen Effekten kommen.
Statt auf Canvas kannst du auf einem JPanel zeichnen. Dazu überschreibst du die paintComponent()-Methode.
 

MiniDirk

Mitglied
Ja genau die leiste wird unter der richtigen leiste noch einmal gezeichnet. Habe leider keinen Webspace um das Bild einzubinden.

Und das mit dem mischen war mir bekannt, deswegen habe ich auch in dem Spielfeld wo ich ja die anderen Sachen so langsam einbinden möchte die paintComponent Metheode überschrieben.

Wie funktioniert das den mit der Doppelbufferung? Ist gibt da ja die möglichkeit mit setDoubleBuffered(true) das Panel zu buffern.

Doch irgendwie scheint das nicht zu funktionieren.
 

MiniDirk

Mitglied
Hallo zusammen,

ich bin jetzt einen Schritt weiter gekommen und zwar habe ich das Spielfeld jetzt von JPanel abgeleitet sonder von JComponent und komischerweise funktioniert es jetzt so wie ich mir das denke. Kann mir das einer vielleicht erklären?
Es gibt keine doppelte Menuleiste mehr

Ein kleineres Problem habe ich dennoch und zwar nicht das Spielfeld keine Hintergrundfarbe an mit setBackground, es gibt aber auch keine Fehlermeldung. Hat da jemand eine Lösung für mich.

Mir ist da noch etwas aufgefallen und zwar habe ich in dem BAP_Spiel eine Variable Pause eingefügt, die wenn jemand im Menü etwas macht das Spiel anhält. Mache ich das nicht dauert es weig bis sich ein Dialog oder das Menü wieder aufbaut.

Hier noch mal der Quellcode der beiden Hauptklassen:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.String;
import java.lang.System;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 11.11.2006
  * @author
  */

public class BAP_Spiel extends JFrame {
  // Anfang Variablen
  private JMenuBar jmb_menu = new JMenuBar();
  private JMenu jmu_Spiel = new JMenu("Spiel");
  private JMenuItem SpielJMenuItem1 = new JMenuItem("Neu");
  private JMenuItem SpielJMenuItem2 = new JMenuItem("Beenden");
  private JMenu jmu_Level = new JMenu("Level");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem1 = new JRadioButtonMenuItem("Level 1");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem2 = new JRadioButtonMenuItem("Level 2");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem3 = new JRadioButtonMenuItem("Level 3");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem4 = new JRadioButtonMenuItem("Level 4");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem5 = new JRadioButtonMenuItem("Level 5");
  private JMenu jmu_Highscore = new JMenu("Highscore");
  private JMenuItem HighscoreJMenuItem1 = new JMenuItem("Anzeigen");
  private JMenuItem HighscoreJMenuItem2 = new JMenuItem("löschen");
  private JMenuItem HighscoreJMenuItem3 = new JMenuItem("Laden");
  private JMenuItem HighscoreJMenuItem4 = new JMenuItem("Speichern");
  private JMenuItem HighscoreJMenuItem5 = new JMenuItem("Eingeben");
  private JMenu jmu_Hilfe = new JMenu("Hilfe");
  private JMenuItem HilfeJMenuItem1 = new JMenuItem("Hilfe");
  private JMenuItem HilfeJMenuItem2 = new JMenuItem("Info");
  private ButtonGroup LevelRadioButton = new ButtonGroup();
  public boolean Pause=true;
  public Spielfeld SpielFeldBAP = new Spielfeld();
  public static int mausX,mausY;
  // Ende Variablen

  public BAP_Spiel(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    addMouseMotionListener(new MouseMotionListener() {
      public void mouseDragged(MouseEvent e) {

      }

      public void mouseMoved(MouseEvent e) {
        mausX = e.getX();
        mausY = e.getY();

      }
    });
    int frameWidth = 800;
    int frameHeight = 600;

    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);

    SpielFeldBAP.setDoubleBuffered(true);
    SpielFeldBAP.setLayout(null);
    Container cp = getContentPane();
    cp.add(SpielFeldBAP);

    // Anfang Komponenten

    setJMenuBar(jmb_menu);
    jmb_menu.add(jmu_Spiel);
        SpielJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        SpielJMenuItem1ActionPerformed(evt); } });
    jmu_Spiel.add(SpielJMenuItem1);
    jmu_Spiel.addSeparator();
    SpielJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        SpielJMenuItem2ActionPerformed(evt); } });
    jmu_Spiel.add(SpielJMenuItem2);
    //Hier wird definiert das die Levelauswahl gruppiert wird sprich immer nur eine Auswahl möglich
    LevelRadioButton.add(LevelJRadioButtonMenuItem1);
    LevelRadioButton.add(LevelJRadioButtonMenuItem2);
    LevelRadioButton.add(LevelJRadioButtonMenuItem3);
    LevelRadioButton.add(LevelJRadioButtonMenuItem4);
    LevelRadioButton.add(LevelJRadioButtonMenuItem5);
    // ENde der definition
    jmb_menu.add(jmu_Level);
    LevelJRadioButtonMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem1ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem1);

    LevelJRadioButtonMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem2ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem2);

    LevelJRadioButtonMenuItem3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem3ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem3);

    LevelJRadioButtonMenuItem4.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem4ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem4);

    LevelJRadioButtonMenuItem5.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem5ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem5);

    jmb_menu.add(jmu_Highscore);
    HighscoreJMenuItem5.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem5ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem5);

    HighscoreJMenuItem3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem3ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem3);

    HighscoreJMenuItem4.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem4ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem4);

    HighscoreJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem1ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem1);
   jmu_Highscore.addSeparator();
    HighscoreJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem2ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem2);
    jmb_menu.add(jmu_Hilfe);
        HilfeJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HilfeJMenuItem1ActionPerformed(evt); } });
    jmu_Hilfe.add(HilfeJMenuItem1);
    jmu_Hilfe.addSeparator();
    HilfeJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HilfeJMenuItem2ActionPerformed(evt); } });
    jmu_Hilfe.add(HilfeJMenuItem2);

    // Ende Komponenten



    setResizable(false);
    setVisible(true);

  }

  // Anfang Ereignisprozeduren
  public void SpielJMenuItem1ActionPerformed(ActionEvent evt) {
    Pause=false;
  }
  public void SpielJMenuItem2ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogBeenden DialogEnde = new DialogBeenden(this,"Ende?",true);
  }
  public void LevelJRadioButtonMenuItem1ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem2ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem3ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem4ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem5ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogName DialogNameEingeben = new DialogName(this,"Herzlichen Glückwunsch!",true);
  }

  public void HighscoreJMenuItem1ActionPerformed(ActionEvent evt) {
     Pause=true;
     Highscore.laden("datenNico.ser");
     DialogHighscore DialogHiscoreAnzeigen = new DialogHighscore(this,"Die TOP 10",true);
  }
  public void HighscoreJMenuItem2ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogHighscoreLoeschen DialogHL = new DialogHighscoreLoeschen(this,"Löschen?",true);
  }
  public void HighscoreJMenuItem3ActionPerformed(ActionEvent evt) {
    Pause=true;
    Highscore.laden("datenNico.ser");
  }
  public void HighscoreJMenuItem4ActionPerformed(ActionEvent evt) {
    Pause=true;
    Highscore.speichern("datenNico.ser");
  }
    public void HighscoreJMenuItem5ActionPerformed(ActionEvent evt) {
    DialogName DialogNameEingeben = new DialogName(this,"Herzlichen Glückwunsch!",true);
  }
  public void HilfeJMenuItem1ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogHilfe DialogHilfeAnzeigen = new DialogHilfe(this,"Anleitung",true);
  }
  public void HilfeJMenuItem2ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogInfo DialogInfoAnzeigen = new DialogInfo(this,"Info",true);
  }
  // Ende Ereignisprozeduren
  
  public void spielAblauf(){
    while (isVisible()){


          while (Pause==false){
                SpielFeldBAP.repaint();

                }
}
  }
  public static void main(String[] args) {
    BAP_Spiel spiel = new BAP_Spiel("BAP Spiel von Bejer / DeLiello / Krieger / Küls");

    spiel.spielAblauf();


  }
}


Und das Spielfeld:

Code:
import java.awt.*;
import javax.swing.*;


//class Spielfeld extends JPanel {
class Spielfeld extends JComponent{

      public static final int breite = 794, hoehe = 547, schlaegerBreite = 50, schlaegerHoehe = 12,schlaegerOben=500;
      public boolean balkenTreffer = false;
      public final int anzahlBalkenSpalten = 14,anzahlBalkenReihen = 2;
      
      Ball ball;
      Balken balkenReihe[][] = new Balken[anzahlBalkenReihen][anzahlBalkenSpalten];

      public Spielfeld(){

      setBackground(Color.black);
      


      ball = new Ball(50,450,10);
      ball.setSpeedX(1);
      ball.setSpeedY(1);
      
       for (int i = 1; i < anzahlBalkenReihen; i++) {
         for (int j = 1; j < anzahlBalkenSpalten; j++){
            balkenReihe[i][j] = new Balken((j-1) * 60 + 14,150 - (i * 20),Color.red);
        }
       }
      }
      protected void paintComponent(Graphics g){

      g.setColor(Color.ORANGE);
      g.drawLine(0,0,794,547);


      ball.paintComponent(g);
          for (int i=1;i<anzahlBalkenReihen;i++){
      for (int j=1;j<anzahlBalkenSpalten;j++){
        if (balkenReihe[i][j].getGetroffen() == false){
          balkenReihe[i][j].paintComponent(g);
        }
      }
    }
      g.setColor(Color.gray);
      g.fill3DRect(BAP_Spiel.mausX - schlaegerBreite/2, schlaegerOben, schlaegerBreite, schlaegerHoehe, true);

      ball.bewegen(balkenTreffer);
          balkenTreffer = false;
    ball.testeObSchlaegerGetroffen(schlaegerOben,schlaegerOben+schlaegerHoehe,BAP_Spiel.mausX - schlaegerBreite/2,BAP_Spiel.mausX + schlaegerBreite/2);


    for (int i=1;i<anzahlBalkenReihen;i++){
      for (int j=1;j<anzahlBalkenSpalten;j++){
      if (balkenReihe[i][j].getGetroffen() == false){
        balkenReihe[i][j].pruefeTreffer(ball.getBallX(),ball.getBallY(),ball.getBallRadius());
        if (balkenTreffer == false){
          balkenTreffer = balkenReihe[i][j].getGetroffen();
          if (balkenTreffer == true){

          }//{anzahlTreffer++;}
        }
      }
      }
    }
     }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
TobiasN Wer Wird Millionär Spiele- und Multimedia-Programmierung 4
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
R JPanel wird erst im Fullscreen angezeigt Spiele- und Multimedia-Programmierung 1
K Das Leerzeichen der Tastatur wird nicht gleichgesetzt mit dem Leerzeichen aus der Text Datei Spiele- und Multimedia-Programmierung 5
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S GetBufferStrategy-Methode wird nicht angezeigt Spiele- und Multimedia-Programmierung 6
G Wer wird Millionär / Fragefenster Spiele- und Multimedia-Programmierung 6
L Transparenz wird magenta Spiele- und Multimedia-Programmierung 3
Polarfuchs Status von Midi Datei(wird gerade abgespielt oder nicht) Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
F 4 Gewinnt - Code wird ignoriert Spiele- und Multimedia-Programmierung 7
C Mein Programm wird sofort terminated Spiele- und Multimedia-Programmierung 8
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
J Versch. Pfeiltasten angezeigt obwohl nur 1 gedrückt wird Spiele- und Multimedia-Programmierung 2
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
S Nur den Bereich des JPanels zeichen der im Viewport des JScrollPane angezeigt wird Spiele- und Multimedia-Programmierung 8
Q BufferedImage vs. Heap Space ‒ Warum wird der Speicher nicht freigegeben? Spiele- und Multimedia-Programmierung 6
M Karte wird falsch gezeichnet Spiele- und Multimedia-Programmierung 9
H Skalierung eines Polygons ohne das es verschoben wird Spiele- und Multimedia-Programmierung 3
C Alles hängt, wenn ein Sound abgespielt wird Spiele- und Multimedia-Programmierung 9
K Transformation wird nicht angewendet Spiele- und Multimedia-Programmierung 3
A Wie wird die Person im Game animiert, dass sie ihre Körperteile bewegen? Spiele- und Multimedia-Programmierung 3
A Shape Geometry, wird nicht angezeigt Spiele- und Multimedia-Programmierung 6
L Progress Bar wird erst zu spät ganz angezeigt Spiele- und Multimedia-Programmierung 5
D Jogl:Textur auf GLUquadric wird vertikal spiegelverkehrt dargestellt Spiele- und Multimedia-Programmierung 2
M Java Textadventure HashMap wird nicht befüllt? Spiele- und Multimedia-Programmierung 7
P [JMF] Webcam wird nicht gefunden Spiele- und Multimedia-Programmierung 3
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
Steev KeyPressed:Tab wird nicht mehr weitergeleitet Spiele- und Multimedia-Programmierung 2
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
0x7F800000 weiß einer wozu ANTLR beim build von JOGL verwendet wird? Spiele- und Multimedia-Programmierung 3
J MenuBar wird bei Spiel nicht angezeigt Spiele- und Multimedia-Programmierung 5
L Frame wird geöffnet es wird aber nix angezeigt Spiele- und Multimedia-Programmierung 2
R Die korrekte Breite/Höhe eines Bildes wird nicht erkannt. Spiele- und Multimedia-Programmierung 2
P JOGL: mit glTranslated wird nichts gezeichnet Spiele- und Multimedia-Programmierung 3
F Szene wird nicht komplett angezeigt (Tiefenproblem?) Spiele- und Multimedia-Programmierung 2
G Fragespiel, Hilfe ! like Wer wird Millinär Spiele- und Multimedia-Programmierung 12
F WakeupOnAWTEvent wird ignoriert! Spiele- und Multimedia-Programmierung 2
C BackgroundSound wird nicht abgespielt Spiele- und Multimedia-Programmierung 3
T Screenshot funktion, malt doppelt? Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben