问题描述
当我用箭头键移动另一只乌龟时,我试图在屏幕上缓慢移动绘图。问题是我的代码只让绘图在屏幕上移动,不允许我用键移动另一只乌龟。我尝试在 while true 语句中定义键,但结果仍然相同。
这是我的代码:
from turtle import *
setup(500,500)
Screen()
screen = Screen()
title("Turtle Keys")
turtle1 = Turtle()
turtle2 = Turtle()
def moving_square():
turtle1.fillcolor("Red")
turtle1.begin_fill()
for i in range(4):
turtle1.forward(50)
turtle1.right(90)
turtle1.end_fill()
turtle1.goto(-350,0)
turtle1.pendown()
turtle1.hideturtle()
def k1():
turtle2.forward(50)
def k2():
turtle2.left(45)
def k3():
turtle2.right(45)
def k4():
turtle2.back(25)
onkey(k1,"Up")
onkey(k2,"Left")
onkey(k3,"Right")
onkey(k4,"Down")
while True:
moving_square()
screen.update()
turtle1.forward(5)
解决方法
它需要 listen() 对按下的键做出反应。
您甚至在 onkey()
的文档中也有此信息from turtle import *
# --- functions ---
def moving_square():
turtle1.fillcolor("Red")
turtle1.begin_fill()
for i in range(4):
turtle1.forward(50)
turtle1.right(90)
turtle1.end_fill()
def k1():
turtle2.forward(50)
def k2():
turtle2.left(45)
def k3():
turtle2.right(45)
def k4():
turtle2.back(25)
# -- main ---
setup(500,500)
Screen()
screen = Screen()
title("Turtle Keys")
turtle1 = Turtle()
turtle2 = Turtle()
turtle1.goto(-350,0)
turtle1.pendown()
turtle1.hideturtle()
onkey(k1,"Up")
onkey(k2,"Left")
onkey(k3,"Right")
onkey(k4,"Down")
listen()
while True:
moving_square()
screen.update()
turtle1.forward(5)
,
对于更多类似游戏的动作,我会采用不同的方式。首先,不是画一个红色的方块,而是把第一只乌龟变成一个红色的方块。其次,通过使用定时事件而不是 while True:
循环:
from turtle import Screen,Turtle
WIDTH,HEIGHT = 500,500
BLOCK_SIZE = 50
CURSOR_SIZE = 20
def k1():
turtle.forward(50)
def k2():
turtle.left(45)
def k3():
turtle.right(45)
def k4():
turtle.back(25)
def move():
block.forward(1)
if block.xcor() < WIDTH/2 + BLOCK_SIZE/2:
screen.ontimer(move,75) # milliseconds
screen = Screen()
screen.setup(WIDTH,HEIGHT)
screen.title("Turtle Keys")
block = Turtle()
block.hideturtle()
block.shape('square')
block.fillcolor('red')
block.shapesize(BLOCK_SIZE / CURSOR_SIZE)
block.penup()
block.setx(-WIDTH/2 - BLOCK_SIZE/2)
block.showturtle()
turtle = Turtle()
turtle.shape('turtle')
turtle.penup()
screen.onkey(k1,'Up')
screen.onkey(k2,'Left')
screen.onkey(k3,'Right')
screen.onkey(k4,'Down')
screen.listen()
move()
screen.mainloop()
您可以通过将 block.forward(1)
调整为更高的值来提高块的速度。如果需要拖尾线,可以放下笔。