Python 乌龟按箭头不动
Python turtle not moving on arrow press
我试图让我的乌龟 (main_ship) 根据用户按下左右箭头键但乌龟没有移动的时间在屏幕底部移动。我以前在制作 Pong 时使用过相同的代码,所以我不确定为什么它不起作用。
import turtle
wn = turtle.Screen()
wn.title("Game")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)
main_ship = turtle.Turtle()
main_ship.speed(0)
main_ship.shape("turtle")
main_ship.color("green")
main_ship.shapesize(stretch_wid=2, stretch_len=4)
main_ship.penup()
main_ship.goto(0, -290)
main_ship.left(90)
def main_ship_right():
x = main_ship.xcor()
x += 20
main_ship.setx(x)
def main_ship_left():
x = main_ship.xcor()
x -= 20
main_ship.setx(x)
while True:
wn.update()
wn.mainloop()
wn.listen()
wn.onkeypress(main_ship_right, "Right")
wn.onkeypress(main_ship_left, "Left")
当我按下箭头键时,没有任何反应,但代码仍在运行并且没有错误消息。
您必须在 mainloop()
之前分配密钥,这 运行 一直到您关闭 window。
您不需要 while True
,因为 mainloop()
已经 运行 内部循环。
您可能必须删除 wm.tracer(0)
,否则您必须 运行 wn.update()
才能刷新 window.
中的元素
import turtle
# --- functions ---
def main_ship_right():
x = main_ship.xcor()
x += 20
main_ship.setx(x)
wn.update()
def main_ship_left():
x = main_ship.xcor()
x -= 20
main_ship.setx(x)
wn.update()
# --- main ---
wn = turtle.Screen()
wn.title("Game")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)
main_ship = turtle.Turtle()
main_ship.speed(0)
main_ship.shape("turtle")
main_ship.color("green")
main_ship.shapesize(stretch_wid=2, stretch_len=4)
main_ship.penup()
main_ship.goto(0, -290)
main_ship.left(90)
wn.update()
wn.listen()
wn.onkeypress(main_ship_right, "Right")
wn.onkeypress(main_ship_left, "Left")
wn.mainloop()
对于这种运动风格,还有另一种实现方式。这个想法是让光标沿其原始方向移动,但使用 settiltangle()
使其看起来像朝上。
这让我们可以使用 forward(20)
和 backward(20)
来移动光标,而不必写:
x = main_ship.xcor()
x += 20
main_ship.setx(x)
非常适合 Space 入侵者风格的游戏,其中玩家面朝上但向侧面移动:
from turtle import Screen, Turtle
from functools import partial
screen = Screen()
screen.title("Game")
screen.bgcolor('black')
screen.setup(width=800, height=600)
main_ship = Turtle('turtle')
main_ship.speed('fastest')
main_ship.color('green')
main_ship.shapesize(stretch_wid=2, stretch_len=4)
main_ship.settiltangle(90)
main_ship.penup()
main_ship.sety(-290)
screen.onkeypress(partial(main_ship.forward, 20), 'Right')
screen.onkeypress(partial(main_ship.backward, 20), 'Left')
screen.listen()
screen.mainloop()
仅适用于 Python 附带的 turtle 库 -- 在线 Python 开发站点通常提供有限的 turtle 实现,不包括 settiltangle()
.[=16 等方法=]
我试图让我的乌龟 (main_ship) 根据用户按下左右箭头键但乌龟没有移动的时间在屏幕底部移动。我以前在制作 Pong 时使用过相同的代码,所以我不确定为什么它不起作用。
import turtle
wn = turtle.Screen()
wn.title("Game")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)
main_ship = turtle.Turtle()
main_ship.speed(0)
main_ship.shape("turtle")
main_ship.color("green")
main_ship.shapesize(stretch_wid=2, stretch_len=4)
main_ship.penup()
main_ship.goto(0, -290)
main_ship.left(90)
def main_ship_right():
x = main_ship.xcor()
x += 20
main_ship.setx(x)
def main_ship_left():
x = main_ship.xcor()
x -= 20
main_ship.setx(x)
while True:
wn.update()
wn.mainloop()
wn.listen()
wn.onkeypress(main_ship_right, "Right")
wn.onkeypress(main_ship_left, "Left")
当我按下箭头键时,没有任何反应,但代码仍在运行并且没有错误消息。
您必须在 mainloop()
之前分配密钥,这 运行 一直到您关闭 window。
您不需要 while True
,因为 mainloop()
已经 运行 内部循环。
您可能必须删除 wm.tracer(0)
,否则您必须 运行 wn.update()
才能刷新 window.
import turtle
# --- functions ---
def main_ship_right():
x = main_ship.xcor()
x += 20
main_ship.setx(x)
wn.update()
def main_ship_left():
x = main_ship.xcor()
x -= 20
main_ship.setx(x)
wn.update()
# --- main ---
wn = turtle.Screen()
wn.title("Game")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)
main_ship = turtle.Turtle()
main_ship.speed(0)
main_ship.shape("turtle")
main_ship.color("green")
main_ship.shapesize(stretch_wid=2, stretch_len=4)
main_ship.penup()
main_ship.goto(0, -290)
main_ship.left(90)
wn.update()
wn.listen()
wn.onkeypress(main_ship_right, "Right")
wn.onkeypress(main_ship_left, "Left")
wn.mainloop()
对于这种运动风格,还有另一种实现方式。这个想法是让光标沿其原始方向移动,但使用 settiltangle()
使其看起来像朝上。
这让我们可以使用 forward(20)
和 backward(20)
来移动光标,而不必写:
x = main_ship.xcor()
x += 20
main_ship.setx(x)
非常适合 Space 入侵者风格的游戏,其中玩家面朝上但向侧面移动:
from turtle import Screen, Turtle
from functools import partial
screen = Screen()
screen.title("Game")
screen.bgcolor('black')
screen.setup(width=800, height=600)
main_ship = Turtle('turtle')
main_ship.speed('fastest')
main_ship.color('green')
main_ship.shapesize(stretch_wid=2, stretch_len=4)
main_ship.settiltangle(90)
main_ship.penup()
main_ship.sety(-290)
screen.onkeypress(partial(main_ship.forward, 20), 'Right')
screen.onkeypress(partial(main_ship.backward, 20), 'Left')
screen.listen()
screen.mainloop()
仅适用于 Python 附带的 turtle 库 -- 在线 Python 开发站点通常提供有限的 turtle 实现,不包括 settiltangle()
.[=16 等方法=]