2016-04-24 7 views
0

Wenn ich Turtle importieren, dann versuchen Sie eine while True: Schleife verwenden, damit es nicht funktioniert. Hier ist der Code:während True: funktioniert nicht mit Turtle

import turtle 
import time 

stage = turtle.Turtle() 

width = 900 
height = 500 

def up(): 
    turtle.setheading(90) 
    turtle.forward(10) 

def down(): 
    turtle.setheading(270) 
    turtle.forward(10) 

def char(): 
    turtle.listen() 
    turtle.onkey(up, 'w') 
    turtle.onkey(up, 's') 

turtle.setup(width, height) 
turtle.goto(390, 0) 
char() 

while True: 
    if (turtle.ycor() >= 250): 
     turtle.goto(460, 0) 

stage.goto(350, 0) 
turtle.done() 

Ich habe keine Ahnung, warum es nicht funktioniert, es nur friert (reagiert nicht) dann keine Fehlermeldungen. Es ist wirklich ärgerlich, da das selbe mit anderen Programmen passiert ist, wo ich Turtle und echte Loops hatte.

Wenn wahr ist das Problem, gibt es einen anderen Weg, "immer zu prüfen, ob", danke!

+1

Wo beendest du deine 'while' Schleife? –

+0

Warum erwarten Sie 'turtle.ycor()> = 250', wenn' turtle' auf '(390,0)' d. H. Wenn die y-Koordinate gleich null ist? –

+0

Weil du die Schildkröte auf und ab bewegst, aber ich kann nicht, weil das Fenster nicht reagiert, Du bewegst es mit W und S, wenn es oben ankommt, geht es wieder runter –

Antwort

0

Anstatt Ihre unendliche Schleife, können Sie jede Routine, die die Schildkröte Prüfung bewegt, wenn die Schildkröte die Grenze von Interesse erreicht hat:

import turtle 

WIDTH = 900 
HEIGHT = 500 

def up(): 
    turtle.setheading(90) 
    turtle.forward(10) 
    check() 

def down(): 
    turtle.setheading(270) 
    turtle.forward(10) 
    check() 

def check(): 
    if turtle.ycor() >= HEIGHT/2: 
     turtle.goto(400, 0) 

turtle.setup(WIDTH, HEIGHT) 

turtle.goto(350, 0) 

turtle.listen() 
turtle.onkey(up, 'w') 
turtle.onkey(down, 's') 

turtle.done() 

Beachten Sie auch, dass Ihr Original-Code zwei Schildkröten hatte, die eine Standard und eine namens stage - verfolge die Schildkröte, die du manipulierst! Wenn Sie sich über Ihr Koordinatensystem bewegen, bewegen Sie die Schildkröte vom Bildschirm weg (es sei denn, Sie wollten das) und können sie nicht zurück auf den Bildschirm bewegen.

0

Ich weiß nicht genau, was Sie erreichen müssen, aber Sie könnten wahrscheinlich die nur nach innen setzen

if (turtle.ycor() >= 250): 
    turtle.goto(460, 0) 

nach oben() und (nach unten).

Obwohl, wenn Sie die Funktion für immer ausführen müssen, wie Sie in Ihrem Kommentar erwähnt haben, können Sie Ihre while True: Sache in einen zweiten Thread, der Ihr Fenster vor dem Einfrieren halten sollte setzen.