Zeichnen in Java

C

Crymes

Guest
Hallo, ich will Pong in Java programmieren.
Aktuell hakts bei der 2d-Zeichnung, könnt ihr mir vll. folgenden Code um ein fertig gezeichnetes Viereck ergänzen, damit ich sehe wie ich das Zeichensystem Java2d initialisieren muss?

Code:
import javax.swing.*;

public class Mpspiel {
	
	public static void main(String[] args) {
		
		//Fenster erstellen
		JFrame Fenster = new JFrame("Multiplayer Spiel");
		Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Fenster.setSize(500, 500);
		Fenster.setVisible(true);
		
	}

}
 
Schau mal hier: Java ist auch eine Insel – 14.10 Java 2D-API auf etwas über der Hälfte der Seite. Ansonsten hier ( The Programmer's Weblog: Beginning Java 2D Game Programming Part 1 ) direkt mit dem Hintergrund eines Kleinen Spiels ;)

Der erste Link enthält folgendes:
Code:
[COLOR=#0000ff][B]package com.javatutor.insel.ui.g2d;[/B] [COLOR=#0000ff][B]import java.awt.*;[/B] 
[COLOR=#0000ff][B]import java.awt.geom.Line2D;[/B] [COLOR=#0000ff][B]import javax.swing.*;[/B] [B]
class[/B] [COLOR=#2040a0]First2DDemo [B]extends[/B] [COLOR=#2040a0]JPanel [COLOR=#4444FF][B]{
[/B]   @[COLOR=#2040a0]Override   [B]protected[/B] [B]void[/B] [COLOR=#2040a0]paintComponent[COLOR=#4444FF][B]([/B] [COLOR=#2040a0]Graphics [COLOR=#2040a0]g [COLOR=#4444FF][B])[/B]  
 [COLOR=#4444FF][B]{[/B]     [COLOR=#2040a0]Graphics2D [COLOR=#2040a0]g2 [COLOR=#4444FF]= [COLOR=#4444FF][B]([/B][COLOR=#2040a0]Graphics2D[COLOR=#4444FF][B])[/B] [COLOR=#2040a0]g[COLOR=#4444FF];   
  [COLOR=#2040a0]g2.[COLOR=#2040a0]setRenderingHint[COLOR=#4444FF][B]([/B] [COLOR=#2040a0]RenderingHints.[COLOR=#2040a0]KEY_ANTIALIASING, [COLOR=#2040a0]RenderingHints.[COLOR=#2040a0]VALUE_ANTIALIAS_ON[COLOR=#4444FF][B])[/B][COLOR=#4444FF];  
  [COLOR=#2040a0]g2.[COLOR=#2040a0]draw[COLOR=#4444FF][B]([/B] [B]new[/B] [COLOR=#2040a0]Line2D.[COLOR=#2040a0]Double[COLOR=#4444FF][B]([/B] [COLOR=#FF0000]10, [COLOR=#FF0000]10, [COLOR=#2040a0]getWidth[COLOR=#4444FF][B]([/B][COLOR=#4444FF][B])[/B][COLOR=#4444FF]-[COLOR=#FF0000]10, [COLOR=#FF0000]70 [COLOR=#4444FF][B])[/B] [COLOR=#4444FF][B])[/B][COLOR=#4444FF];
[COLOR=#4444FF][B]}[/B]   

[B]public[/B] [B]static[/B] [B]void[/B] [COLOR=#2040a0]main[COLOR=#4444FF][B]([/B] [COLOR=#2040a0]String[COLOR=#4444FF][B][[/B][COLOR=#4444FF][B]][/B] [COLOR=#2040a0]args [COLOR=#4444FF][B])[/B]   
[COLOR=#4444FF][B]{[/B]     
[COLOR=#2040a0]     JFrame [COLOR=#2040a0]f [COLOR=#4444FF]= [B]new[/B] [COLOR=#2040a0]JFrame[COLOR=#4444FF][B]([/B][COLOR=#4444FF][B])[/B][COLOR=#4444FF];[COLOR=#2040a0]     f.[COLOR=#2040a0]setDefaultCloseOperation[COLOR=#4444FF][B]([/B] [COLOR=#2040a0]JFrame.[COLOR=#2040a0]EXIT_ON_CLOSE [COLOR=#4444FF][B])[/B][COLOR=#4444FF];     [COLOR=#2040a0]f.[COLOR=#2040a0]setSize[COLOR=#4444FF][B]([/B] [COLOR=#FF0000]200, [COLOR=#FF0000]120 [COLOR=#4444FF][B])[/B][COLOR=#4444FF];     [COLOR=#2040a0]f.[COLOR=#2040a0]add[COLOR=#4444FF][B]([/B] [B]new[/B] [COLOR=#2040a0]First2DDemo[COLOR=#4444FF][B]([/B][COLOR=#4444FF][B])[/B] [COLOR=#4444FF][B])[/B][COLOR=#4444FF];     [COLOR=#2040a0]f.[COLOR=#2040a0]setVisible[COLOR=#4444FF][B]([/B] [B]true[/B] [COLOR=#4444FF][B])[/B][COLOR=#4444FF];   
[COLOR=#4444FF][B]}[/B] [COLOR=#4444FF][B]
}
[/B]
Was genau jetzt die "graphics" in der PainComponent-Methode sind könnte man dann recherchieren oder explorativ erschließen :D

Edit: Siehe: http://stackoverflow.com/questions/1965347/how-do-i-intialize-a-graphics-object-in-java
 
OK Ich hab jetzt mal ein Bisschen rumprobiert und folgende Fragen:
-Wozu brauche ich das JPanel? Ist das eine Art zeichenfläche?
-Was macht das @Override?
-Wie soll ich folgende Zeile verstehen: f.add( new First2DDemo() ); ?
 
(Zeichnen mit Java habe nich selbst noch nicht gemacht, deswegen nur Vermutungen:)
1)
Das Panel ist wahrscheinlich eine Basisklasse/Interface für die Verwendung von einfachen grafischen Komponenten; quasi, wie die Übersetzung vermuten lässt eine einfache "Zeichenfläche" o.ä. Du trägst jetzt unten in der main im JFrame f deine First2DDemo ein, damit das Teil halt in deinem Fenster gezeichnet werden kann. Das JFrame unterstützt nun wahrscheinlich nur* Objekte/Klassen, die die Basisklasse/das Interface JPanel implementieren (weil dort die Methode paintComponent vorgesehen ist).
Intern ist es wahrscheinlich so, dass das JFrame nur eine Liste von JPanels hat und dort die Methode paintComponent einfach aufruft. Dazu ist halt JPanel da. Könnte man auch "BasisklasseFuerZeichnen" nennen, wichtig ist eben diese pain-Methode. Dann wird es wohl auch so sein, dass du 2D-Graphics überhaupt nicht initialisieren musst, sondern das kommt direkt in der painComponent bereits fertiginitialisiert (vom JFrame) als Parameter ;)
2)
Das @Override sagt dem Compiler, dass jetzt ein Codeabschnitt kommt, der einen anderen Abschnitt überschreiben soll. Das Interface bzw. die abstrakte Basisklasse JPanel implementieren wahrscheinlich keinen Code für die Methode paintComponent und jetzt bist du als Entwickler gefragt dort Code zu erzeugen, der dann das Programm ausmacht.
3)
Die letzte Zeile wird nun wie bereits erwähnt einfach dein Zeichenobjekt in eine Liste (im JFrame) eintragen. Das JFrame weiß nun wie/wann/wat/weshalb/wo/warum/... mit den in der Liste eingetragenen Objekten umzugehen ist.
Kurz: Du erstellst eine Klasse (hier First2DDemo) abgeleitet von JPanel (oder auch weiteren, damit halt verschiedene Funktionen gewährleistet sind und die vorgefertigen Java-Klassen damit umgehen können), überschreibst die paintComponent-Methode mit deinem gewünschten Zeichenverhalten und trägst dann die Objekte deiner Klasse einfach ins JFrame ein.


* wen du Codevorschläge/"Intellisense" in deiner Entwicklungsumgebung für Java hast, wird dir bestimmt angezeigt, welche Typen du zu einem JFrame "adden" kannst :)
 
Java Standard: Grafische Oberflächen mit Swing: leightweight Container: javax swing JPanel
JPanel ist also einfach nur ein bereich, dem man etwas zuordnen kann. nen button, ne zeichen oberfläche, nen text... mit dem JPanel lässt sich der inhalt dann halt im fenster positionieren - ggf eben auch ausfüllend. mit.add fügst du deinem JPanel f halt deinen zeichenkrams hinzu. der wird dann mit dem JPanel zusammen irgendwo irgendwie positioniert ausgegeben.

Annotation (Java)
"@Override: Mit diesem Typ kann eine Methode gekennzeichnet werden, die die Methode ihrer Oberklasse überschreibt. Der Compiler stellt dann sicher, dass die Oberklasse diese Methode enthält und gibt einen Fehler aus, wenn dies nicht der Fall ist."
 
Vor einigen Jahren habe ich mit dem "JBuilder" mal ein wenig herumprobiert, ohne auch nur etwas von JAVA zu kennen.
Mit Javascript aufgerufen <applet code='javafrak.class' width='448' height='336'></applet> wird das Applet im Browser angezeigt.

Code:
// $Header: z:/javafrak.java 2.1
import java.awt.*;
import java.lang.*;

public class javafrak extends java.applet.Applet
implements Runnable
{
 Thread thread=null;
 int Max_X,Max_Y,Iter,X,Y,Col,ColR,ColG,ColB;
 double A,B,C,D,G,F,H,I,J,K,L,M,Zoom,verti,hori;
 double A1,B1,C1,D1,Step;
 String message1,message2,textfont;
 int textsize,textX,textY,textH,textW;
 Graphics offGraphics;
 Image offImage;

 public void init()
 {
  Max_X=size().width;
  Max_Y=size().height;
  offImage=createImage(Max_X,Max_Y);
  offGraphics=offImage.getGraphics();
  offGraphics.fillRect(0,0,Max_X+1,Max_Y+1);

  Iter  = 1250;
  hori  = .000036;             // nach rechts
  verti = .000035;             // höher
  Zoom  = .002500;             // tiefer
  Step  = Zoom/80;
  A     = -.765216+Zoom+hori;
  B     = -.765325-Zoom+hori;
  C     = .099886-Zoom+verti;
  D     = .099996+Zoom+verti;

  message1  = "Bitte etwas Geduld";
  message2  = "Fraktal wird berechnet";
  textfont  = "TimesRoman";
  textsize  = 36;
  Font myFont=new Font(textfont, Font.BOLD, textsize);
  FontMetrics myMetrix=getFontMetrics(myFont);
  textH=myMetrix.getHeight();
  textW=myMetrix.stringWidth(message1);
  textX=(int)((Max_X-textW)/2);
  textY=(int)((Max_Y-textH)/2)-myMetrix.getDescent();
  setFont(myFont);
 }

 public void start()
 {
  if(thread == null)
  {
   thread = new Thread(this);
   thread.start();
  }
 }

 public void stop()
 {
  thread = null;
  offImage = null;
  offGraphics = null;
 }

 public void run()
 {
  while (thread != null)
  {
   try {Thread.sleep(0);}
   catch (InterruptedException e) {}
   repaint();
  }
 }

 public void paint(Graphics g)
 {
  setBackground(Color.black);
  g.setColor(Color.green);
  g.drawString(message1,textX,textY);
  g.drawString(message2,textX-textsize,textY+textH);
  update(g);
 }

 public void update(Graphics g)
 {
  A1 = A;
  B1 = B;
  C1 = C;
  D1 = D;

  A -= Step;
  B += Step;
  C += Step;
  D -= Step;

  G=(D1-C1)/Max_Y;
  F=(B1-A1)/Max_X;
//----------------------------------------------
  for (Y = 0; Y < Max_Y; Y++)
  {
   for (X = 0; X < Max_X; X++)
   {
    Col=0;
    K=G*Y+C1;
    J=K;
    I=F*X+A1;
    H=I;
    L=J*J;
    M=H*H;
//----------------------------------------------
    frak: {
           while (Col<Iter)
           {
            J=2*H*J+K;
            H=M-L+I;
            L=J*J;
            M=H*H;
            Col++;

            if ((M+L)>4)
            {
             break frak;
            }
           }
          }
// --------------  Pixel-Setzer ----------------
    Col=(Col & 0x0000FF); // and

    ColR=(Col & 0xE0);

    ColG=(Col & 0x18);
    ColG=(ColG << 3);    // shl

    ColB=(Col & 0x07);
    ColB=(ColB << 5);

    offGraphics.setColor(new Color(ColR,ColG,ColB));
    offGraphics.drawLine(X,Y,X,Y);
//----------------------------------------------
   }   // next X
  }    // next Y
//----------------------------------------------
  g.drawImage(offImage,0,0,this);
 }
}
Ich habe wirklich keine Ahnung ob das so gemacht wird.
Hat jemand Verbesserungsvorschläge?

(Wegen den unendlich vielen Klammern und den damit verbundenen Fehlern die man damit machen kann finde ich die Sprache Java und auch Javascript einfach nur grauenhaft.)

Dirk
 
hast du über java oder js hinaus jemals mit was andrem geproggt? weil das mit den klammern ist überall so >< selbst bei html! un das is ned ma ne programmiersprache ^^ nur dass du da halt keine klammern, sondern tags hast. egal wie mans nennt oder in welcher form auch immer, blöcke werden halt mit irgendwas gekennzeichnet.
 
hast du über java oder js hinaus jemals mit was andrem geproggt?
Ja das habe ich tatsächlich schon gemacht.

weil das mit den klammern ist überall so >< selbst bei html! un das is ned ma ne programmiersprache ^^ nur dass du da halt keine klammern, sondern tags hast. egal wie mans nennt oder in welcher form auch immer, blöcke werden halt mit irgendwas gekennzeichnet.
Nö, hier möchte ich widersprechen, das ist nicht überall so.

Z.B. bei Assembler braucht man maximal nur zwei eckige Klammern[] pro Befehl und dann nur für den Fall, wenn auf Speicher-Adressen zugegriffen werden soll, oder eine Adressberechnung vollzogen werden soll.
Aber für die Mehrzahl aller anderen Assembler-Befehle werden gar keine Klammern benötigt. Auch Basic und Pascal kommen ebenfalls mit sehr viel weniger Klammen aus, womit es ja offensichtlich wird, dass so viele Klammern nicht unbedingt benötigt werden. Aber je mehr Klammern verwendet werden, desto häufiger können sich hier Fehler einschleichen und die Suche nach so einen blöden Fehler muss wirklich nicht sein.

Kannst du auch etwas über meinen Code sagen, darüber würde ich gerne Mal eine Kritik hören/lesen?

Dirk
 
pascal nuzt wörter anstelle von klammern um blöcke zu bilden. BEGIN und END nur so als bsp sind genau das gleiche wie { und } :schief: btw solltest du dich dann vllt besser von lisp fernhalten - DAS ist klammernsalat xD
 
pascal nuzt wörter anstelle von klammern um blöcke zu bilden. BEGIN und END nur so als bsp sind genau das gleiche wie { und } :schief: btw solltest du dich dann vllt besser von lisp fernhalten - DAS ist klammernsalat xD
Danke, diesen Tip werde ich beherzigen, denn Klammersalat schmeckt mir nicht so gut.

Dirk
 
So, jetzt hab ich das nächste Problem mit nem Key Listener. Ich möchte, dass wenn ich eine Taste drücke eine Funktion aufgerufen wird wo dann Code drinsteht. Ich hab jetzt folgendes:

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.*;

public class Mpspiel extends JPanel implements KeyListener {
	
	@Override
	protected void paintComponent( Graphics g )  
	{ 
		//Grafikobjekt erstellen und initialisieren
		Graphics2D graphics = (Graphics2D) g;   
		graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		
		//Zu Zeichnende Dinge
		
	}
	private static void Fenster()
	{
		//Fenster erstellen
		JFrame Fenster = new JFrame("Multiplayer Spiel");
		Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Fenster.setSize(500, 500);
		Fenster.setVisible(true);		
		Fenster.add(new Mpspiel());
	}
	private void keyPressed(KeyEvent event)
	{
		System.out.println("Key pressed");
	}
	private void keyReleased(KeyEvent event)
	{
		System.out.println("Key Released");
	}
	private void keyTyped(KeyEvent event)
	{
		System.out.println("Key Typed");
	}
	public static void main(String[] args) {
		
		//Initialisierung
		Fenster();
		
	}
}

Als Fehler kommt immer:
Description Resource Path Location Type
Cannot reduce the visibility of the inherited method from KeyListener Mpspiel.java /Multiplayer Game/src line 28 Java Problem
Cannot reduce the visibility of the inherited method from KeyListener Mpspiel.java /Multiplayer Game/src line 32 Java Problem
Cannot reduce the visibility of the inherited method from KeyListener Mpspiel.java /Multiplayer Game/src line 36 Java Problem:huh:
 
Code:
    [B]public[/B] void keyPressed(KeyEvent event)
    {
        System.out.println("Key pressed");
    }
    [B]public[/B] void keyReleased(KeyEvent event)
    {
        System.out.println("Key Released");
    }
    [B]public[/B] void keyTyped(KeyEvent event)
    {
        System.out.println("Key Typed");
    }

Da die Funktionen hier als public Methoden deklariert wurden musst du die Sichtbarkeit beibehalten, also auch public lassen.


Gruß b14ckj4ck
 
Um Reaktionen zu erhalten, musst du dem Fenster noch einen Keylistener hinzufügen, bspw so:

Code:
 private static void Fenster()
 {
  //Fenster erstellen
  JFrame Fenster = new JFrame("Multiplayer Spiel");
  Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  Fenster.setSize(500, 500);
  Fenster.setVisible(true);
  Fenster.add(new main());
  Fenster.addKeyListener(new KeyListener() {
 
   @Override
   public void keyTyped(KeyEvent arg0) {
    System.out.println("Key Typed");    
   }
 
   @Override
   public void keyReleased(KeyEvent arg0) {
    System.out.println("Key Released");    
   }
 
   @Override
   public void keyPressed(KeyEvent arg0) {
    System.out.println("Key pressed");    
   }
  });
 }
 
Jetzt habe ich deinen Code hinzugefügt und den aus der Main gelöscht

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.*;

public class Mpspiel extends JPanel implements KeyListener {
	
	@Override
	protected void paintComponent( Graphics g )  
	{ 
		//Grafikobjekt erstellen und initialisieren
		Graphics2D graphics = (Graphics2D) g;   
		graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		
		//Zu Zeichnende Dinge
		
	}
	private static void Fenster()
	{
		//Fenster erstellen
		JFrame Fenster = new JFrame("Multiplayer Spiel");
		Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Fenster.setSize(500, 500);
		Fenster.setVisible(true);		
		Fenster.add(new Mpspiel());
		
		//Eingabe behandeln
		Fenster.addKeyListener(new KeyListener() 
		{
			 
			@Override
			public void keyTyped(KeyEvent arg0) 
			{
				System.out.println("Key Typed");    
			}			 
			@Override
			public void keyReleased(KeyEvent arg0)
			{
				System.out.println("Key Released");    
			}			 
			@Override
			public void keyPressed(KeyEvent arg0) 
			{
				System.out.println("Key pressed");    
			}
		});
	}	
	public static void main(String[] args) {
		
		//Initialisierung
		Fenster();
		
	}
}

Jetzt erhalte ich folgende Fehler 3-Mal:
Description Resource Path Location Type
The type Mpspiel must implement the inherited abstract method KeyListener.keyTyped(KeyEvent) Mpspiel.java /Multiplayer Game/src line 7 Java Problem

Wenn ich hinter die Klasse MPSpiel noch abstract schreibe, kommt noch ein anderer Fehler.
Was mache ich da falsch?
 
Wenn ich hinter die Klasse MPSpiel noch abstract schreibe, kommt noch ein anderer Fehler.
Was mache ich da falsch?
Wenn du die Klasse abstrakt machst, kannst du keine Instanzen davon erstellen, was hier aber versucht wird:
Code:
Fenster.add(new Mpspiel());

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

Jetzt erhalte ich folgende Fehler 3-Mal:
Description Resource Path Location Type
The type Mpspiel must implement the inherited abstract method KeyListener.keyTyped(KeyEvent) Mpspiel.java /Multiplayer Game/src line 7 Java Problem?
Da du das Interface KeyListener implementierst musst du auch die darin deklarierten Funktionen definieren, also keyTyped(), keyReleased() und keyPressed(),
also den gelöschten Code wieder hinzufügen.
Oder du entfernst einfach das implements KeyListener.
 
Zuletzt bearbeitet:
in der tat hängen beide probleme eng zusammen: Abstrakte Klasse
eine abstrakte klasse implementiert nur die prototypen der methoden, gestaltet (definiert) diese aber nicht aus. sprich: verwendet man eine abstrakte klasse, so muss man zwingend ihre (abstrakten) methoden überschreiben - und somit erstmal implementieren. aber das hat jack ja schon gesagt. wollte nur nochmal den link zum nachlesen anfügen :)
 
So, jetzt habe ich schon wieder das nächste Problem: Ich habe ein paar Objekte und muss vom KeyListener und der Zeichenmethode auf die zugreifen. (Wers noch nicht erraten hat: es soll ein 2-Spieler Pong werden :) )
Das klappt nicht, weil beide die Objekte nicht kennen. Wisst ihr, wie ich die "bekannt" machen kann?

EDIT: Hab den Code mal agepasst, jetzt fehlen nur noch Ein- und Ausgabe :)

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.*;

public class Mpspiel extends JPanel {
		
	@Override
	protected void paintComponent( Graphics g )  
	{ 
		//Grafikobjekt erstellen und initialisieren
		Graphics2D graphics = (Graphics2D) g;   
		graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		
		//Zu Zeichnende Dinge
		
	}
	private static void Fenster()
	{
		//Fenster erstellen
		JFrame Fenster = new JFrame("Multiplayer Spiel");
		Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Fenster.setSize(500, 500);
		Fenster.setVisible(true);		
		Fenster.add(new Mpspiel());
		
		//Eingabe behandeln
		Fenster.addKeyListener(new KeyListener() 
		{
			 
			@Override
			public void keyTyped(KeyEvent event) 
			{
				// W(87) und S(83) Spieler 1, Pfeil hoch(38)/runter(40) Spieler 2					
			}			 
			@Override
			public void keyReleased(KeyEvent event)
			{
				//Beenden
				if(event.getKeyCode() == KeyEvent.VK_ESCAPE)
				{
					System.exit(0);
				}
			}			 
			@Override
			public void keyPressed(KeyEvent event) 
			{
				// W und S Spieler 1, Pfeil hoch/runter Spieler 2
				if(event.getKeyCode() == KeyEvent.VK_W)
				{
					
				}
				if(event.getKeyCode() == KeyEvent.VK_S)
				{
					
				}
				if(event.getKeyCode() == KeyEvent.VK_UP)
				{
					
				}
				if(event.getKeyCode() == KeyEvent.VK_DOWN)
				{
					
				}
			}
		});
	}	
	public static void main(String[] args) {
		
		//Initialisierung
		Fenster();				
		
		//Objekte erstellen
		Kugel Ball = new Kugel(500, 500, 10);
		Balken SliderL = new Balken(30, 500);
		Balken SliderR = new Balken(470, 500);
		
		//main loop
		while(true)
		{
			//Ball bewegen
			Ball.Bewegung();
			
			//Ball auf Kollision mit Slider prüfen
			//SliderR
			if((Ball.PositionX() + Ball.GeschwindigkeitX() >= 470-Ball.Radius()) && (Ball.PositionX() + Ball.Radius() <= SliderR.UntenY() && Ball.PositionX() + Ball.Radius() >= SliderR.ObenY() ))
			{
				Ball.Slider();
			}
			//SliderL
			else if((Ball.PositionX() + Ball.GeschwindigkeitX() >= 30-Ball.Radius()) && (Ball.PositionX() + Ball.Radius() <= SliderL.UntenY() && Ball.PositionX() + Ball.Radius() >= SliderL.ObenY() ))
			{
				Ball.Slider();
			}
			
			//Ball auf GameOver überprüfen
			if(Ball.KollisionX() == true)
			{
				Ball = new Kugel(500, 500, 10);
			}
			
			//Bild ausgeben
			
			
			//Warten, ca. 33 FPS
			try 
			{
				Thread.currentThread();
				Thread.sleep(30);
			} catch (InterruptedException fehler) 
			{				
				
			}
		}
	}
}
 
Zuletzt bearbeitet:
Wenn du in allen Memberfunktionen auf die Objekte zugreifen möchtest, solltest du diese als Attribute der Klasse definieren.
Wenn du sie auch in der Fenster() Methode verwenden möchtest, müssen diese zudem statisch sein, da die Methode selbst statisch ist

mfg b14ckj4ck
 
Zuletzt bearbeitet:
Zurück