Portal > Foren > Java > Allgemeine Java-Programmierung > Ersatz für Thread.sleep();
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 09.05.2005, 13:01 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard Ersatz für Thread.sleep();

Nachdem das Textfeld auf 10000 zeichen begrenzt ist, und mir die nicht ausrechen: weiß jemand die Lösung auf dieses Problem?

http://www.java-forum.org/de/viewtop...799&highlight=
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.05.2005, 13:44 Nach oben    #2
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 581
Standard

Hmmm, also wenn ich hab den Code nur überflogen (heute Abend hab ich mehr Zeit), aber folgendes sollte gehen:

Prüf einfach vor jeder Bewegung des Steins, ob die Bewegung ihn in einen anderen Stein hineinführen würde.
Ist zwar ziemlich aufwendig da alle Obejekte auf Kollision zu überprüfen, sollte aber klappen.

Übrigens, wenn du vorhast mehr solcher Spiele zu enwickeln, schau dir mal die "Golden-T-GameEngine" an.
http://www.jforum.de/showthread.php?t=1211

Gruß
Sparrow
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.05.2005, 13:51 Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard

Das ist ja kein Problem die Kollision zu überprüfen. Nur schläft der Thread ja ne gewisse Zeit lang, bevor der Bildschrim aktualisiert wird. Und in dieser Zeit kann man die Figur einfach seitlich durch andere Blöcke verschieben. Den Link werd ich mir bei Zeit mal anschauen! Danke
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.05.2005, 14:14 Nach oben    #4
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 581
Standard

Ok, folgendes Problem:

Du hast den KeyListener in deiner Hauptklasse.
Die Kollision überprüfst du aber hier:

PHP-Code:
      new Thread(new Runnable() { 
         public 
void run() { 
            
newFigur(); 
            while (
stop == false) {  
               
aktuell(); // <- Kollisionsabfrage?!?
               
hoehe--; 
               if (
hoehe <= fighoehe) { 
                  
newFigur(); 
               } 
            } 
         } 
      }).
start(); 
   } 
glaube ich zumindest.
Ich würde sagen, dass dein MainThread (der Key-Listener des threads) tastendrücke immer verarbeitet.

Hier der Code dafür:
PHP-Code:
   public void keyPressed(KeyEvent key) { 
       
      if (
key.getKeyCode() == 37 && breite minBreite) { 
         
breite--; 
      } 
      else if (
key.getKeyCode() == 39 && breite maxBreite) { 
         
breite++; 
      } 
      [...] 
Aber dort sehe ich keinen Aufruf einer Kollisionsabfrage.
Das heißt: ich könnte in einer Pause des Threads 5 * die Taste rechts drücken, aber erst wenn der Thread weiterläuft würde das Programm merken das ich bewegt habe, und dann auch erst prüfen ob Kollision passiert ist.
In der Zwischenzeit bin ich aber durch den "Turm" durch, und das Programm denkt es ist alles normal.

Ich denke der Timer soll dafür da sein, damit der Stein nach einer gewissen Zeit 1 feld absinkt, richtig?

Mögliche Abhilfe:
In den Thread nur folgendes Packen:
figur höhe--;
unten angekommen?
tot?

Alles andere außerhalb des Threads. in einer eigenen while-schleife.

So, hoffe ich habe deinen Code einigermaße verstanden.

yours
sparrow
sometimes dr. watson, never mr. holmes
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.05.2005, 17:14 Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard

Hab den Code so umgeschrieben, dass man jetzt nicht mehr durch die Blöcke kann, aber jetzt bekomme ich eine ArrayOutOfBoundsException, wenn ich versuche in der letzten oder vorletzen "Zeile" unter einen anderen Block zu rutschen! Ich mal das mal gerade auf :

PHP-Code:
----    --
         -
         - 
Das längliche Ding soll unter dieses halbe T. Dabei kommt dann die Exception in Zeile 215, wenn ich das genau anders herum mache bekomme ich die Exception in Zeile 200. Es handelt sich um die Höhe bis zum Boden (last[i + 1] - 1). Den Code findet ihr (mal wieder) hier http://www.java-forum.org/de/viewtop...=103392#103392
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.05.2005, 18:15 Nach oben    #6
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 581
Standard

Sooo, habs gerade mal probegespielt.

Der Fehler tritt übrigens nicht nur in dem von dir beschriebenen Fall auf.
Wenn unten ein Stein liegt und man einen zweiten daneben positioniert, und dann wie wild auf die <- oder -> taste drück während der Stein aufkommt, dann kommt der selbe Fehler.
Scheint aber nur aufzutreten wenn man gaaaaanz unten ist, also noch keine Steine darunter liegen.

Ich hab die beiden Blöcke die die Exception werfen einfach mal in try/catch eingefügt, und schon funktioniert das Spiel Problemlos.

Wenn ich das richtig verstanden habe, dann sind die beiden Blöcke ja dazu da um ein Feld als "blegt" zu markieren.
Also hab ich ein bisschen gespietlt und den Fehler mutwillig herbeigeführt, während die Blöcke bei Fehlern ohne Korrektur gecached wurden, und es ließ sich trotzdem einwandfrei spielen.
Die Reihen verschwanden wenn sie voll waren, etc.
Woran es jatzt aber liegt, dass der Fehler überhaupt auftritt....ich hab keine Ahnung


Gruß
Sparrow
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.05.2005, 07:45 Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard

Zitat:
Zitat von sparrows Signatur
Es ist immer seeehr hilfreich wenn man eine kurze Efolgsmeldung bekommt ob man helfen konnte oder nicht. Im Thread natürlich.
Danke! Du hast mir geholfen . Die Idee mit dem try catch Block ist mir auch heute nacht irgendwann gekommen :rolleyes: , nur ist diese Lösung sehr unsauber. Ich frag mich übrigens auch warum der Fehler überhaupt auftritt!? Naja, werd später noch ein bisschen dran rumbasteln. Vielleicht bekomm ich's ja "sauberer" hin ...
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.05.2005, 09:52 Nach oben    #8
Erfahrener Benutzer
 
Registriert seit: 02.02.2005
Beiträge: 539
Standard

Nächstes Problem: Manchmal kann man keine Lücken füllen. Also wenn man z. B. versucht ein Viereck unter einem halben T einzufügen bleibt das Viereck vor der Lücke und geht seinen ganz normalen Weg weiter nach unten. Außerdem hab ich noch festgestellt, dass wenn ich den try - catch Block verwende um die ArrayIndexOutOfBoundsException abzufangen, es gelegentlich passiert, dass der aktuelle Stein im "Boden versinkt". Eigentlich müsste das doch alles vernünftig laufen!? Oder hab ich da irgendwo ein Denkfehler? :confused: :confused: :confused:
Gottzilla ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
preg_replace mit array[$1] als Ersatz? Magicman PHP-Programmierung 8 25.09.2005 20:32
Frage zu Thread.sleep() Gottzilla Allgemeine Java-Programmierung 1 05.04.2005 18:07


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45