所以我有一个我的乌龟的运动脚本(称为 mc)
from turtle import *
wn = Screen()
MC=Turtle()
def w():
mc.shape(FFM1)
mc.forward(40)
mc.shape(FFM2)
mc.forward(40)
mc.shape(FFS)
def s():
mc.shape(BFM1)
mc.bk(40)
mc.shape(BFM2)
mc.bk(40)
mc.shape(BFS)
def a():
mc.shape(LFM1)
mc.setx(mc.xcor() - 40)
mc.shape(LFM2)
mc.setx(mc.xcor() - 40)
mc.shape(LFS)
def d():
mc.shape(RFM1)
mc.setx(mc.xcor() + 40)
mc.shape(RFM2)
mc.setx(mc.xcor() + 40)
mc.shape(RFS)
wn.onkey(w, "w")
wn.onkey(s, "s") # "Back"
# ^^^^
wn.onkey(a, "a")
wn.onkey(d, "d")
listen()
mainloop()
这是可行的,但是如果我在乌龟仍在移动时多次按 d,它会继续移动,但是当它停止时,它会传送回它应该从第一次移动开始的位置。
我尝试在函数中添加 time.sleep(2) 但它没有做任何事情,只是将乌龟冻结两秒钟,然后继续破坏
列表 [Python.Docs]:海龟 - 海龟图形。请阅读您正在使用的功能和其他功能的文档。
问题:
listen不等待用户输入
你的整个运动方案都错了。海龟(在本例中)向某个方向移动一步。你永远不会改变方向(默认是0°(右、西)),所以无论你按4个键中的哪一个,它都只会沿着X轴移动
因此,问题中的代码无法工作(更不用说像FFS这样的未定义变量)。我修改了脚本以使其正常工作(还添加了一些改进)。
code00.py:
#!/usr/bin/env python
import sys
import turtle
# @TODO - c. Remove themfati: added these to get rid of errors. Remove them
FFM1 = None
FFM2 = None
FFS = None
BFM1 = None
BFM2 = None
BFS = None
LFM1 = None
LFM2 = None
LFS = None
RFM1 = None
RFM2 = None
RFS = None
screen = turtle.Screen()
obj = turtle.Turtle()
step = 20
def up():
obj.seth(90)
obj.shape(FFM1)
obj.forward(step)
obj.shape(FFM2)
obj.forward(step)
obj.shape(FFS)
def down():
obj.seth(270)
obj.shape(BFM1)
obj.forward(step)
obj.shape(BFM2)
obj.forward(step)
obj.shape(BFS)
def left():
obj.seth(180)
obj.shape(LFM1)
obj.forward(step)
obj.shape(LFM2)
obj.forward(step)
obj.shape(LFS)
def right():
obj.seth(0)
obj.shape(RFM1)
obj.forward(step)
obj.shape(RFM2)
obj.forward(step)
obj.shape(RFS)
def main(*argv):
obj.speed(0)
screen.onkey(up, "w")
screen.onkey(down, "s")
screen.onkey(left, "a")
screen.onkey(right, "d")
# @TODO - cfati: These bindings might be removed as well
screen.onkey(turtle.bye, "q")
screen.onkey(obj.clear, "c")
turtle.listen()
turtle.mainloop()
if __name__ == "__main__":
print(
"Python {:s} {:03d}bit on {:s}\n".format(
" ".join(elem.strip() for elem in sys.version.split("\n")),
64 if sys.maxsize > 0x100000000 else 32,
sys.platform,
)
)
rc = main(*sys.argv[1:])
print("\nDone.\n")
sys.exit(rc)
这是一个打印屏幕示例: