Im applet auf panels zeichnen

  • Themenstarter Gelöschtes Mitglied 12486
  • Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gelöschtes Mitglied 12486

Gast
Hallo,

ich bin dabei ein Applet mit AWT zu programmieren. Es handelt sich um ein pong spiel. Ich möchte hier jedoch zwischen verschiedenen Panels per CardLayout switchen, das funktioniert auch sehr gut. Mein Problem ist nun, dass ich das eigentliche Spiel nur auf dem Applet selber zeichnen kann, jedoch nicht in ein Panel bzw. ich weiss nicht wie ich das mache und ich kann mit dem CardLayout nicht wieder auf das Applet selber switchen (oder doch?).

Wie zeichne ich also mein Spiel in ein Panel, welches ich dann zum CardLayout hinzufügen kann? Oder gibts da ne bessere Lösung? Ich wollte auch ein Canvas probieren, aber das ist ja kein Container, somit lässt es sich nicht zum CardLayout hinzufügen.

Kann mir da jemand helfen?

mfg
huetz
 

L-ectron-X

Gesperrter Benutzer
Ein Applet ist auch ein Panel (es erbt von Panel). Das heißt, du überschreibst genau wie in deinem Applet nur die paint()-Methode in deinen Panels zum Zeichnen.
 
G

Gelöschtes Mitglied 12486

Gast
hmm so naheliegend und doch so fern... :)

danke, ich werde das gleich mal testen ob ich nun zurecht komme.
 
G

Gelöschtes Mitglied 12486

Gast
Hallo,

danke nochmal für die Hilfe!

Ich habe mir nun ein GamePanel erstellt, welches von Panel erbt und mein Spiel zeichnen soll.

Code:
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class GamePanel extends Panel implements Runnable,MouseMotionListener {

	protected GameApplet gameApplet;	

	private int screenX = 600; 
	private int screenY = 400;	
	private Thread gameThread;
	private Spielfeld spielfeld;	
	private int spielfeldX, spielfeldY, spielfeldWidth, spielfeldHeight;
	private Pad linksPad, rechtsPad; // links = 0 und rechts = 1
	private int linksPadX, linksPadY, linksPadWidth, linksPadHeight;
	private int rechtsPadX, rechtsPadY, rechtsPadWidth, rechtsPadHeight;
	private Ball ball[] = new Ball[1];
	private int ballX, ballY;
	private int ballRadius = 6;
	private Random gen = new Random();
	private Spielstand spielstand;
	private int spielstandX, spielstandY;
	
	protected GamePanel(){
		
		spielfeldX = 0;
		spielfeldY = 50;
		spielfeldWidth = screenX;
		spielfeldHeight = screenY-50;
		spielfeld = new Spielfeld(spielfeldX,spielfeldY,spielfeldWidth,spielfeldHeight);
		
		linksPadX = spielfeld.getWidth()*1/1000;
		linksPadY = spielfeld.getY()+spielfeld.getHeight()*50/100-spielfeld.getHeight()*8/100;
		linksPadWidth =spielfeld.getWidth()*1/100;
		linksPadHeight = (spielfeld.getHeight()*16/100);
		linksPad = new Pad(linksPadX,linksPadY,linksPadWidth,linksPadHeight);
		
		rechtsPadX = spielfeld.getWidth()*99/100;
		rechtsPadY = spielfeld.getY()+spielfeld.getHeight()*50/100-spielfeld.getHeight()*8/100;
		rechtsPadWidth = spielfeld.getWidth()*1/100;
		rechtsPadHeight = (spielfeld.getHeight()*16/100);
		rechtsPad = new Pad(rechtsPadX,rechtsPadY,rechtsPadWidth,rechtsPadHeight);
		
		ballX = spielfeld.getWidth()*5/10;
		ballY = spielfeld.getY()+spielfeld.getHeight()*5/10;
		for (int i = 0; i < ball.length; i++){
			ball[i] = new Ball(ballX,ballY,ballRadius,(gen.nextDouble()*10.0)-5.0,(gen.nextDouble()*10.0)-5.0,linksPad,this);
		}		
		spielstandX = 500;
		spielstandY = 20;
		spielstand = new Spielstand(spielstandX,spielstandY);
		
			
	}
	public void start(){
		gameThread = new Thread(this);
		gameThread.start();
	}
	public void run(){
		while (true){
			for (int i = 0; i < ball.length; i++){
				ball[i].move();
				ball[i].kollisionPad(linksPad,rechtsPad);
				ball[i].kollisionWand(spielfeldX, spielfeldY,spielfeldWidth,spielfeldHeight);
			}
			
			try{
				gameThread.sleep (10);
			}
			catch (InterruptedException ex){	
			}
		}
	}
	public void paint(Graphics g){
		spielfeld.paint(g);
		linksPad.paint(g);
		spielstand.paint(g);
		for (int i = 0; i < ball.length; i++){
			ball[i].paint(g);
		}
	}
	public Spielfeld getSpielfeld(){
		return spielfeld;
	}
	public Pad getPad(){
		return linksPad;
	}
	public Spielstand getSpielstand(){
		return spielstand;
	}
	public Ball[] getBall(){
		return ball;
	}
	public void mouseDragged(MouseEvent arg0) {
		
	}

	public void mouseMoved(MouseEvent e) {
		if(e.getY()+linksPad.getHeight()/2 >= spielfeld.getY()+spielfeld.getHeight()){
			
		}
		else if(e.getY() - linksPad.getHeight()/2 <= spielfeld.getY()){
			
		}
		else{
			linksPad.setY(e.getY()-linksPad.getHeight()/2);
		}
	}
	
}

In meinem Applet rufe ich nun so die paint() Methode auf.
Code:
public void paint(Graphics g){
		gamePanel.paint(g);
	}

Zwar zeichnet mein Applet nun einmal da Spiel, wenn ich es starte. Jedoch zeichnet er es nur einmal. Die Spiellogik läuft im hintergrund ab, das sehe ich an der Konsole. Aber gezeichnet wird da Panel nur einmal am Anfang. Danach ändert sich zwar die Position des Balles, aber er wird nicht mehr neu gezeichnet.

Wie erreiche ich das? Und kann ich die Listener, die ich in diesem Panel implementiere dann auch im Applet benutzen?

mfg
huetz
 

L-ectron-X

Gesperrter Benutzer
Die Panels fügst du mit der add()-Methode zum Applet hinzu.
Deine Panels zeichnest du bei Bedarf mit repaint() neu.
 
G

Gelöschtes Mitglied 12486

Gast
Ich adde meine Panels bei mir einem zu einem CardLayout hinzu.
Code:
		add(lobbyPanel,LOBBYPANEL);
		add(gameNamePanel,GNPANEL);
		add(gamePanel,GAME);

Per klick auf den button wird dann mein gamePanel angezeigt.
Code:
	if(evt.getActionCommand().equals("start")){
		card.show(this,GAME);
		gamePanel.start();
	}

In der run() Methode meines Applets habe ich dann um mein Applet und alle Panels neu zu zeichen folgendes:
Code:
public void run() {
		while(true){
			try{
				repaint();
				appletThread.sleep(5);
			}catch(InterruptedException e){
				
			}
		}
	}

Es bewegt sich aber dann in meinem GamePanel nichts. Es sollte ja nun alle 5 ms ein repaint() ausgeführt werden, welches auch da GamePanel zum neuzeichnen zwingt. Oder versteh ich da was falsch?

Jedenfalls bewegen sich mein ball und mein pad nicht. In der Konsole bekomme ich aber die Kollisionsdaten meines Balles mit der Umgebung ausgegeben.
 
G

Gelöschtes Mitglied 12486

Gast
ich hab mein problem lösen können, ich musste nur in der runmethode des GamePanels nun auch ein repaint() machen.


Das bringt mich dann aber nun zum nächsten Problem.


Ich will meinen Schläger per Maus steuern. Dazu hatte ich das Interface MouseMotionListener implementiert und über die Methode mouseMoved() konnte ich das wunderbar steuern.

Jetzt, wo ich da Spiel aber in einem eigenen Panel und nicht mehr im Applet habe, funktioniert das nicht mehr. Wo muss ich nun den Listener implementieren? Im Applet selbst oder im Panel?

Oder kann ich die Objekte in meinem GamePanel mit den verschiedenen Listenern aus dem Applet selbst steuern?
 

Quaxli

Top Contributor
Guck mal hier. Ist zwar nicht direkt für Applets, aber ob man jetzt ein JPanel in einen JFrame oder ein JApplet schmeißt, ist fast egal. ;)
 
G

Gelöschtes Mitglied 12486

Gast
ich hab aber ein awt Panel :) kein Swing.

in dem tutorial macht er alles in einen JPanel. Ich hingegen rufe ja aus einem Applet ein anderes Panel auf und lasse es anzeigen. Meine Problem ist nun, dass ich die Mausbewegung auf ein Objekt aus diesem angezeigten Panel übertragen möchte.

wenn ich die bewegung an ein objekt im applet selber übergebe, dann klappt das auch.
 
G

Gelöschtes Mitglied 12486

Gast
der entscheidende Tip war im tutorial versteckt! Danke für den Tip da rein zu schauen :) somit ist da Thema hier erstmal erledigt :)

Danke!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Applet mit Panels (so richtig, gehts besser?) AWT, Swing, JavaFX & SWT 3
G Im Applet Panels anzeigen lassen AWT, Swing, JavaFX & SWT 2
U suchverfahren vergleich einbinden von panels ? in applet ;) AWT, Swing, JavaFX & SWT 11
G Grafikformat für AWT-Applet? AWT, Swing, JavaFX & SWT 0
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
T Applet Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 8
C Applet Applet funktioniert in Eclipse aber nicht in Browser AWT, Swing, JavaFX & SWT 1
S Sandboxed Applet weiterhin moeglich..? AWT, Swing, JavaFX & SWT 5
S Oracle's neue Sicherheitseinstellungen zerstoeren mein Applet. Was tun? AWT, Swing, JavaFX & SWT 3
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
U CardLayout im Applet AWT, Swing, JavaFX & SWT 4
J Applet Applet Vererbung/Überladen AWT, Swing, JavaFX & SWT 5
G JavaFX mit ANT deployen als Applet AWT, Swing, JavaFX & SWT 3
S Applet Application 2 applet AWT, Swing, JavaFX & SWT 3
T Applet JTattoo Look and Feel AWT, Swing, JavaFX & SWT 5
T Signiertes Applet Urheber angeben AWT, Swing, JavaFX & SWT 5
S Applet Repaint AWT, Swing, JavaFX & SWT 3
B Java-Applet Parameter übergabe? AWT, Swing, JavaFX & SWT 2
M Applet mit Bildern AWT, Swing, JavaFX & SWT 2
T Applet in JSP einbinden AWT, Swing, JavaFX & SWT 4
R MouseEvent.getX() liefert in Applet Screen-Koordinate AWT, Swing, JavaFX & SWT 2
K Applet Wieso kann ich keine Array im Applet initialisieren AWT, Swing, JavaFX & SWT 13
A Applet Applet vom Web-Server aus aufrufen AWT, Swing, JavaFX & SWT 11
A Applet Applet startet nicht AWT, Swing, JavaFX & SWT 2
P Tatsächliche Größe für Applet AWT, Swing, JavaFX & SWT 3
B Applet Aus Applet signiertes jar mit externen libs erstellen AWT, Swing, JavaFX & SWT 9
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
M Warum funktioniert mein Applet nicht? AWT, Swing, JavaFX & SWT 6
D Applet hintergrund wird nicht weiß AWT, Swing, JavaFX & SWT 2
R Applet JavaScript Methodenaufruf AWT, Swing, JavaFX & SWT 2
A Applet Animiertes gif in awt applet anzeigen AWT, Swing, JavaFX & SWT 11
X Applet Java Applet Datei Ausführung AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
A Applet Applet aus Code neu starten AWT, Swing, JavaFX & SWT 2
K Applet erkennt keine Frameverkleinerung AWT, Swing, JavaFX & SWT 5
S Applet funktioniert nach Browserreload nicht richtig AWT, Swing, JavaFX & SWT 2
T Applet Applet vs. WebStart AWT, Swing, JavaFX & SWT 4
S Applet starten AWT, Swing, JavaFX & SWT 4
K JTable im Browser nicht zu sehen - Applet AWT, Swing, JavaFX & SWT 6
B Applet Button oder Toolbar in einem Applet AWT, Swing, JavaFX & SWT 5
V Applet mit Bildbearbeitung AWT, Swing, JavaFX & SWT 3
V Applet Applet starten schlägt fehl AWT, Swing, JavaFX & SWT 2
W Button in Applet AWT, Swing, JavaFX & SWT 9
kniffel GUI-Applet JTable füllt Hintergrund völlig aus AWT, Swing, JavaFX & SWT 4
J Applet Java-Applet friert mit Firefox ein AWT, Swing, JavaFX & SWT 8
J Applet Tetris flackert AWT, Swing, JavaFX & SWT 9
F Applet Applet starten...(+Timer?) AWT, Swing, JavaFX & SWT 12
S [JAVA] JFrame in Applet/JApplet AWT, Swing, JavaFX & SWT 14
D Applet Applet das auf fremden Libraries basiert einbinden? AWT, Swing, JavaFX & SWT 20
M Applet wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
E Applet Neuen Tab aus Applet öffnen AWT, Swing, JavaFX & SWT 3
G Applet, Link ermitteln, dem der Benutzer gefolgt ist AWT, Swing, JavaFX & SWT 2
K Email versenden ueber Applet AWT, Swing, JavaFX & SWT 11
S Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 6
S Button aktivieren (Applet) AWT, Swing, JavaFX & SWT 2
3 Applet Applet zeigt nur weiße Fläche AWT, Swing, JavaFX & SWT 15
B 2 Probleme (JFrame & Applet) AWT, Swing, JavaFX & SWT 7
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
H applet Methode aus abstrakter Klasse aufrufen AWT, Swing, JavaFX & SWT 12
H Applet - Hilfedateien im Browser öffnen / eine Webseite laden AWT, Swing, JavaFX & SWT 6
O JPanel aus Applet starten AWT, Swing, JavaFX & SWT 3
O Applet-Steuerung mit Tastaturbefehlen AWT, Swing, JavaFX & SWT 3
F 4-Gewinnt als Applet AWT, Swing, JavaFX & SWT 24
F Applet vs Stand-Alone-Client AWT, Swing, JavaFX & SWT 3
B AWT Bild als Hintergrund im Applet AWT, Swing, JavaFX & SWT 2
D Probleme mit MouseWheelListener und JLayeredPane in Applet AWT, Swing, JavaFX & SWT 2
G Applet und Swing Anwendung AWT, Swing, JavaFX & SWT 2
S Applet - Aerger mit dem Hintergrundbild - JLabel und JTextfield AWT, Swing, JavaFX & SWT 7
F Applet zeigt Bilder nicht an AWT, Swing, JavaFX & SWT 5
R for-Schleife in Applet ausgeben AWT, Swing, JavaFX & SWT 3
S Bild wird auf Canvas in Applet nicht gezeichnet AWT, Swing, JavaFX & SWT 4
W Swing heapsort + Applet AWT, Swing, JavaFX & SWT 4
P Diagramm in einem Applet zeichnen AWT, Swing, JavaFX & SWT 4
M Java Applet JTable/JList AWT, Swing, JavaFX & SWT 6
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2
K Alternative zu Applet mit HTML-Einbindung AWT, Swing, JavaFX & SWT 11
J Java-Applet beenden AWT, Swing, JavaFX & SWT 3
R Applet aus JFrame starten AWT, Swing, JavaFX & SWT 2
T Konfiguration speichern in Applet AWT, Swing, JavaFX & SWT 2
P Swing Roter Faden beim Applet GUI Programmieren AWT, Swing, JavaFX & SWT 2
T HTML Seite neu laden mittels Applet AWT, Swing, JavaFX & SWT 2
T Icon von Frame ändern - Applet AWT, Swing, JavaFX & SWT 2
T Java Applet beenden AWT, Swing, JavaFX & SWT 2
M Swing Butten & TextFields aus Applet im JFrame nicht sichtbar AWT, Swing, JavaFX & SWT 2
I Swing .Jar Datei - funktioniert - nun als Applet AWT, Swing, JavaFX & SWT 13
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
M AWT text im applet formatieren AWT, Swing, JavaFX & SWT 5
L Applet Frage AWT, Swing, JavaFX & SWT 25
1 Verständnisprobleme bei Java Applet AWT, Swing, JavaFX & SWT 13
B Unterschied JFrame/Applet AWT, Swing, JavaFX & SWT 12
T [Applet] startet in Eclipse aber nicht im Browser AWT, Swing, JavaFX & SWT 2
G JSlider in Applet AWT, Swing, JavaFX & SWT 4
P Swing Applet AWT, Swing, JavaFX & SWT 2
R problem mit bildanzeige in applet und main AWT, Swing, JavaFX & SWT 2
A Applet kommt offline nicht mit FileReader zurecht AWT, Swing, JavaFX & SWT 3
F Applet und Popup AWT, Swing, JavaFX & SWT 4
G Wie startet man ein Applet ? AWT, Swing, JavaFX & SWT 4
R Ein Applet von einem Applet öffnen lassen AWT, Swing, JavaFX & SWT 2
Z Applet ausblenden AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben