Applet Tetris flackert

Java und so~

Mitglied
Alsooo~
ich schreibe momentan an einem Tetris programm (noch gaaaaaaanz am Anfang) und habe das Problem, dass ein Rechteck, was sich von oben nach unten bewegt nicht unten stehen bleibt, sondern aus dem Applet verschwindet und am unteren Rand wieder auftaucht und wieder verschwindet usw.
Mein Problem-Code dazu sieht so aus:
Java:
	public void run ()
	{

	    // Erniedrigen der ThreadPriority
	    Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

	    // Solange true ist läuft der Thread weiter
	    
	    while (true)
	    {
		    if (y_pos > appletsize_y + radius)
		    {

		        // Ändern der Position des Balles
		        y_pos = 280;

		    } 
		    
	    	//Verändere y Koordinate des Balls
	    	y_pos+=y_speed;
	        // Neuzeichnen des Applets
	        repaint();
	        
	        

	        try
	        {
	            // Stoppen des Threads für in Klammern angegebene Millisekunden
	            Thread.sleep (20);
	        }
	        catch (InterruptedException ex)
	        {
	            // do nothing
	        }

	        // Zurücksetzen der ThreadPriority auf Maximalwert
	        Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
	    } 
	    
	}

Kompletter Code:
Java:
import java.applet.*;
import java.awt.*;

public class Tetris extends Applet implements Runnable {

	int x_pos = 100;
	int y_pos = 10;
	int radius = 20;
	int y_speed = 1;
	int appletsize_x = 300;
	int appletsize_y = 300;
	private Image dbImage;
	private Graphics dbg;
	int w = this.getSize().width;
	int h = this.getSize().height;
	
	public void init() {
			this.resize(350,300);
	}

	public void start ()
	{

	    // Schaffen eines neuen Threads, in dem das Spiel läuft
	    Thread th = new Thread (this);
	    // Starten des Threads
	    th.start ();

	} 

	public void stop() { }

	public void destroy() { }

	public void run ()
	{

	    // Erniedrigen der ThreadPriority
	    Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

	    // Solange true ist läuft der Thread weiter
	    
	    while (true)
	    {
		    if (y_pos > appletsize_y + radius)
		    {

		        // Ändern der Position des Balles
		        y_pos = 280;

		    } 
		    
	    	//Verändere y Koordinate des Balls
	    	y_pos+=y_speed;
	        // Neuzeichnen des Applets
	        repaint();
	        
	        

	        try
	        {
	            // Stoppen des Threads für in Klammern angegebene Millisekunden
	            Thread.sleep (20);
	        }
	        catch (InterruptedException ex)
	        {
	            // do nothing
	        }

	        // Zurücksetzen der ThreadPriority auf Maximalwert
	        Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
	    } 
	    
	} 

	public void paint (Graphics g)
	{

	    // Setzten der Zeichenfarbe auf Rot
	    g.setColor (Color.red);

	    // Zeichen eines gefüllten Rechtecks
	    g.fillRect (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);

	} 
	
	public void update (Graphics g)
	{

	    // Initialisierung des DoubleBuffers
	    if (dbImage == null)
	    {
	        dbImage = createImage (this.getSize().width, this.getSize().height);
	        dbg = dbImage.getGraphics ();
	    }

	    // Bildschirm im Hintergrund löschen
	    dbg.setColor (getBackground ());
	    dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

	    // Auf gelöschten Hintergrund Vordergrund zeichnen
	    dbg.setColor (getForeground());
	    paint (dbg);

	    // Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
	    g.drawImage (dbImage, 0, 0, this);

	}
	
	
}

Danke schonmal für jegliche hilfreiche Hinweise~
 
Zuletzt bearbeitet von einem Moderator:

Fu3L

Top Contributor
Java:
if (y_pos > appletsize_y + radius)
            {
 
                // Ändern der Position des Balles
                y_pos = 280;
 
            }

Um es mal in Worte zu fassen:
Wenn dieses Objekt den unteren Rand unterschritten hat, dann bringe es (zurück) auf Position 280. Wenn das Applet höher ist, dann ist es klar, dass es immer hin und her springt.

Java:
public void init() {
            this.resize(350,300);
    }
 

Java und so~

Mitglied
Wenn ich die zahl y_pos auf 260 ändere wird es höher zurück gesetzt und geht wieder raus etc. und wenn ich es auf 320 setzte geht es raus und falckert außerhalb des Applets weiter... (20 als Differenz immer, da der "Radius" 20 beträgt)
Also wie soll ich es jetzt genau ändern?
 

Fu3L

Top Contributor
Naja, du wirst irgendwann mehr als einen Stein haben. Dann würde ich empfehlen dafür eine eigene Klasse zu schreiben. Diese Objekte kannst du in einer LinkedList oder ArrayList lagern und bei jedem Threadaufruf über die Liste iterieren. Wenn dann ein Stein den Boden erreicht hast, dann musst du das Objekt aus der genannten Liste entfernen und in eine neue packen, deren Objekte nur gezeichnet aber nicht weiter bewegt werden. Natürlich empfiehlt es sich, diese ganzen Bewegungen in einer extra Methode auszulagern.
Quaxlies Tutorial, welches du im Spieleprogrammierungsbereich im Tutoriale-Thread findest, ist für das Grundgerüst eines Spiels seehr zu empfehlen.
 

Java und so~

Mitglied
Ich hab mir mal das Tut von Quaxlie angeguckt und den Code mal in Eclipse geschrieben um das zu Testen, allerdings zeigt Eclips mir immer nur "Exception in thread "main" java.lang.Error: Unresolved compilation problem: Cannot make a static reference to the non-static method GamePanel(int, int) from the type Tet" an.
Das Problem liegt bei der Methode GamePanel die nicht static ist, aber in der statischen main-Methode aufgerufen wird.

Code:
Java:
	public static void main (String[]args) {
		GamePanel(800, 600);
	}
	
	public void GamePanel (int w, int h){
		this.setPreferredSize(new Dimension(w, h));
		frame = new JFrame ("Tetris");
		frame.setLocation(100, 100);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(this);
		frame.pack();
		frame.setVisible(true);
		
		doInitalizations();
		Thread th = new Thread(this);
		th.start();
	}
 
S

SlaterB

Gast
da groß geschrieben, ist im Original sicher der Konstruktor einer Klasse, und Aufruf = Objekterstellung mit new gemeint, richtig?

das und generell das Wissen, ob statische Methoden nicht-statische aufrufen können, bzw. was man dabei an Änderungsalternativen hat, sind ziemlich tiefe Grundlagen,
sehr fraglich dass du dann überhaupt verstehst was du da machst in komplizierten Applets mit GUI, Threads usw...
 

Java und so~

Mitglied
da groß geschrieben, ist im Original sicher der Konstruktor einer Klasse, und Aufruf = Objekterstellung mit new gemeint, richtig?

das und generell das Wissen, ob statische Methoden nicht-statische aufrufen können, bzw. was man dabei an Änderungsalternativen hat, sind ziemlich tiefe Grundlagen,
sehr fraglich dass du dann überhaupt verstehst was du da machst in komplizierten Applets mit GUI, Threads usw...

Ich habe im WS Programmieren I studiert (also alles ohne GUI etc.) und mache jetzt ein Praktikum indem ich mir GUI etc selbst beibringen soll (falls sich jemand darüber wundern sollte, dass ich nicht einfach weiter studiert habe: Habe nur ein Frühstudium im WS mit Programmieren I gemacht und mache nun an der gleichen Uni ein Schulpraktikum)
Den größten Teil verstehe ich ja bis jetzt schonmal, nur es verwirrt mich halt, dass es bei Quaxlie funktioniert und bei mir nicht...
 
S

SlaterB

Gast
aber das ist nun geklärt? Konstruktor vs. Methode?
spätestens, als du noch den im Original wie für Konstruktoren üblich fehlenden Rückgabetyp void ergänzen musstest,
hätte dir auffallen sollen, dass da was nicht stimmt
 
Zuletzt bearbeitet von einem Moderator:

Mofi

Bekanntes Mitglied
Ich habe im WS Programmieren I studiert (also alles ohne GUI etc.) und mache jetzt ein Praktikum indem ich mir GUI etc selbst beibringen soll (falls sich jemand darüber wundern sollte, dass ich nicht einfach weiter studiert habe: Habe nur ein Frühstudium im WS mit Programmieren I gemacht und mache nun an der gleichen Uni ein Schulpraktikum)
Den größten Teil verstehe ich ja bis jetzt schonmal, nur es verwirrt mich halt, dass es bei Quaxlie funktioniert und bei mir nicht...

Weil Qiaxlie es anders geschrieben hat.

Java:
...
public static void main(String[] args){
 new GamePanel(800, 600);
}

public GamePanel(int w, int h){
...
}
...

bei den ... denk dir den Code der da hingehört.

In der main-Methode sollte hier ein Objekt erzeugt werden damit es funktioniert. Und Konstruktoren schreibt man ohne ein "void" bzw immer ohne Rückgabewert.

Edit: War ich wohl ein wenig zu langsam :p
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
G JList wird in einem Applet nur teilweise aktualisiert AWT, Swing, JavaFX & SWT 12
P Applet darstellung von Textfeldern Problem AWT, Swing, JavaFX & SWT 3
I Applet --> neues Fenster öffnen AWT, Swing, JavaFX & SWT 11
I Applet mit Panels (so richtig, gehts besser?) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben