2017-11-02 2 views
0

Ich versuche, Kotlin zu lernen, indem ich durch das Buch "Android Game Programming bei Beispiel" arbeite. Jetzt komme ich nicht weiter zum Erstellen von Threads. In Java wird ein Thread zuerst mit Null definiert und später mit sleep() verzögert. Da ich noch ein Newbe bin, kann ich den Code nicht an meine Bedürfnisse anpassen. So habe ich eine Erklärung für Threads in Kotlin gefunden. Aber ich kann es nicht umsetzen. Kann mir jemand sagen, wie ich das an meinem Beispiel machen soll? Ich schneide die Codezeilen für die Threads aus.Convert Java Thread zu Kotlin

public class TDView extends SurfaceView implements Runnable { 

//Thread related 
volatile boolean playing; 
Thread gameThread = null; //Line 29 
... 
private void control() { 
    try { 
     gameThread.sleep(17);   //Line 310 
    } catch (InterruptedException e) { 
     //catch things here 
    } 
} 

public void pause() { 
    playing = false; 
    try { 
     gameThread.join();    //Line 319 
    } catch (InterruptedException e) { 
     //catch things here 
    } 
} 

public void resume() { 
    playing = true; 
    gameThread = new Thread(this); //Line 327 
    gameThread.start(); 
} 

Der vollständige Code kann here gefunden werden.

Ich dachte, ich es so tun würde:

private val gameThread: Thread? = null 
. 
//Line 310 same as Java -- here I can't find the sleep-method 
//Line 319 same as Java 
. 
gameThread? = Thread(this) 
gameThread.start() 

P. S. Ich habe this Artikel zu lesen, aber ich weiß nicht, wie es zu passen.

+0

Ich denke, es wäre einfacher, wenn Sie Ihren vollen Kotlin-Code veröffentlichen, anstatt zu versuchen, bestimmte Abschnitte zu überspringen. Ich kann sehen, was Sie erreichen wollten, aber der vollständige Code wäre hilfreicher. – Michael

+1

Und was genau ist die Frage? Nicht klar für mich. – AxelH

+0

Ich würde gerne wissen, wie man diesen Code korrekt in Kotlin schreibt. Wie würdest du und warum? @Michael hier mein Code im Moment (https://gist.github.com/willhoh/9c6e8bc18983f86af3e6e0e2aa1fd499) – WillHoh

Antwort

0

Sie Code von Java Kotlin

  1. Auf dem Hauptmenü auf Menü Code umwandeln können.
  2. Wählen Sie Java-Datei in Kotlin-Datei konvertieren.

.

@Volatile internal var playing: Boolean = false 
internal var gameThread: Thread? = null //Line 29 

private fun control() { 
    try { 

     //because that don't exist you can try that 
     //gameThread!!.sleep(17)   //Line 310 

     Thread.sleep(17) 
     gameThread!!.stop() //Line 310 
    } catch (e: InterruptedException) { 
     //catch things here 
    } 

} 

fun pause() { 
    playing = false 
    try { 
     gameThread!!.join()    //Line 319 
    } catch (e: InterruptedException) { 
     //catch things here 
    } 

} 

fun resume() { 
    playing = true 
    gameThread = Thread(this) //Line 327 
    gameThread!!.start() 
} 
+1

... wenn Sie Android Studio verwenden. –

+0

Guter Punkt, können Sie meinen Code testen – gmetax

+0

jetzt änderte ich die Steuerfunktion und verwenden Sie "Thread.sleep (17)", ohne "gameThread !!. Stop()", und es funktioniert. Aber warum brauche ich die Klassenmethode und nicht die Instanzmethode gameThread.sleep? – WillHoh