Hallo,
habe folgendes vor.
Ich will ein kleines Spiel programmieren in dem man mit der Mausbewegung einen Luftballon steuert und Pfeilen ausweichen muss welche von oben herunter kommen.
bis jetzt hat auch alles funktioniert. jedoch war ich nun dran die Position der Pfeile zu ändern, quasi das diese von oben immer weiter runter kommen.
Deshalb hab ich in Zeile 238 gedacht, mithilfe einer while schleife und einer Thread sleep funktion einen Pfeil somit immer weiter runter zu zeichnen.
Leider musste ich feststellen. dass das Gesamte Fenster so lange weiß bleibt, bis alle Anweisungen ausfegührt wurden und dann am Ende das Fenster dargestellt wird. was kann ich machen das dies trotzdem immer wieder gezeichnet wird?
Wie kann ich das machen? Ist mein Aufbau falsch?!
Vielen Dank schonmal für die Hilfe!
habe folgendes vor.
Ich will ein kleines Spiel programmieren in dem man mit der Mausbewegung einen Luftballon steuert und Pfeilen ausweichen muss welche von oben herunter kommen.
bis jetzt hat auch alles funktioniert. jedoch war ich nun dran die Position der Pfeile zu ändern, quasi das diese von oben immer weiter runter kommen.
Deshalb hab ich in Zeile 238 gedacht, mithilfe einer while schleife und einer Thread sleep funktion einen Pfeil somit immer weiter runter zu zeichnen.
Leider musste ich feststellen. dass das Gesamte Fenster so lange weiß bleibt, bis alle Anweisungen ausfegührt wurden und dann am Ende das Fenster dargestellt wird. was kann ich machen das dies trotzdem immer wieder gezeichnet wird?
Java:
package versenken;
import java.awt.EventQueue;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Random;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Point;
import java.awt.Robot;
import java.awt.SystemColor;
import java.awt.Toolkit;
public class GUI extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private static JPanel contentPane;
//private JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI frame = new GUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public GUI() {
//Hauptmenü wird erstellt
setTitle("Fliegender Ballon");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 800, 600);
contentPane = new JPanel();
contentPane.setBackground(Color.LIGHT_GRAY);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
//Button wird erstellt um das Spiel zu starten
################################################################## Game ##################
JButton btnStart = new JButton("Spiel starten");
btnStart.setBackground(SystemColor.activeCaption);
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
spiel();
}
});
btnStart.setBounds(350, 216, 106, 23);
contentPane.add(btnStart);
//Button wird erstellt um ein Menü "Optionen" aufzurufen
################################################## Optionen ######################
JButton btnOption = new JButton("Optionen");
btnOption.setBackground(SystemColor.activeCaption);
btnOption.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
//Neues Frame wird erzeugt für das Menü Optionen
final JFrame Options = new JFrame("Fliegender Ballon - Optionen");
Options.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Options.setBounds(100, 100, 800, 600);
contentPane = new JPanel();
contentPane.setBackground(Color.LIGHT_GRAY);
Options.setContentPane(contentPane);
Options.getContentPane().setLayout(null);
//Button wird erzeugt um zurück ins Hauptmenü zu gelangen
JButton btnBack = new JButton("Zurück");
btnBack.setBackground(SystemColor.activeCaption);
btnBack.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Options.dispose();
}
});
Options.getContentPane().add(btnBack);
btnBack.setSize(106, 23);
btnBack.setLocation(350, 430);
Options.setVisible(true);
} catch (Exception f) {
f.printStackTrace();
}
}
});
btnOption.setBounds(350, 285, 106, 23);
contentPane.add(btnOption);
//Button wird erstellt um das Spiel zu beenden
###################################################### Spiel Beenden #######################
JButton btnEnd = new JButton("Beenden");
btnEnd.setBackground(SystemColor.activeCaption);
btnEnd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
btnEnd.setBounds(350, 319, 106, 23);
contentPane.add(btnEnd);
}
private static int zufall(){
Random zahl = new Random();
//int foo = zahl.nextInt();
int bar = zahl.nextInt(750);
return bar;
}
private static void spiel() {
try {
//Neues Frame wird erzeugt für das Spiel
final JFrame Game = new JFrame("Fliegender Ballon - Spiel");
Game.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Game.setBounds(100, 100, 800, 600);
contentPane = new JPanel();
contentPane.setBackground(Color.LIGHT_GRAY);
Game.setContentPane(contentPane);
Game.getContentPane().setLayout(null);
//Bild des Ballons wird geladen und an ein Label gehängt
Icon iballon = new ImageIcon ("Bild.jpg");
final JLabel Ballon = new JLabel(iballon);
Ballon.setBackground(Color.LIGHT_GRAY);
Ballon.setOpaque(true);
//Es wird ein "Schein-Bild" erzeugt um den Cursor Unsichtbar zu schalten
BufferedImage cursorImg = new BufferedImage(22,22,BufferedImage.TYPE_INT_ARGB);
Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(cursorImg, new Point(0,0), "blank cursor");
Game.getContentPane().setCursor(blankCursor);
//Der Cursor wird auf einen bestimmten Punkt platziert
Robot mouse = new Robot();
mouse.mouseMove(500,600);
//Der Ballon angezeigt im Label folgt den Mausbewegungen
Game.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e)
{
Ballon.setBounds(e.getX()-25, e.getY()-50,45, 45);
Ballon.repaint();
}
});
Game.add(Ballon);
Icon iPfeilrot = new ImageIcon("pfeil_red.gif");
final JLabel Pfeilrot = new JLabel(iPfeilrot);
Pfeilrot.setBackground(Color.LIGHT_GRAY);
Pfeilrot.setOpaque(true);
Pfeilrot.setBounds(zufall(),-50,25,100);
Game.add(Pfeilrot);
Icon iPfeilgreen = new ImageIcon("pfeil_green.gif");
final JLabel Pfeilgreen = new JLabel(iPfeilgreen);
Pfeilgreen.setBackground(Color.LIGHT_GRAY);
Pfeilgreen.setOpaque(true);
Pfeilgreen.setBounds(zufall(),-50,25,100);
Game.add(Pfeilgreen);
Icon iPfeilorange = new ImageIcon("pfeil_orange.gif");
final JLabel Pfeilorange = new JLabel(iPfeilorange);
Pfeilorange.setBackground(Color.LIGHT_GRAY);
Pfeilorange.setOpaque(true);
Pfeilorange.setBounds(zufall(),-50,25,100);
Game.add(Pfeilorange);
Icon iPfeilwhite = new ImageIcon("pfeil_white.gif");
final JLabel Pfeilwhite = new JLabel(iPfeilwhite);
Pfeilwhite.setBackground(Color.LIGHT_GRAY);
Pfeilwhite.setOpaque(true);
Pfeilwhite.setBounds(zufall(),-50,25,100);
Game.add(Pfeilwhite);
Game.setVisible(true);
final int X;
final int Y=-50;
Icon iPfeilblue = new ImageIcon("pfeil_blue.gif");
final JLabel Pfeilblue = new JLabel(iPfeilblue);
Pfeilblue.setBackground(Color.LIGHT_GRAY);
Pfeilblue.setOpaque(true);
Pfeilblue.setBounds(X=(zufall()),Y,25,100);
Game.add(Pfeilblue);
Game.setVisible(true);
int bla=1;
int j = 1;
while(j<500){
Thread.sleep(500);
bla=bla+Y;
Pfeilblue.setBounds(X,bla,25,100);
Game.setVisible(true);
Game.repaint();
bla=bla+1;
j++;
}
} catch (Exception f) {
f.printStackTrace();
}
}
}
Wie kann ich das machen? Ist mein Aufbau falsch?!
Vielen Dank schonmal für die Hilfe!