python - 如何在 Python 中单独更新海龟
问题描述
我目前正在尝试在 python 中单独更新多个海龟。在下面显示的示例中,我试图让底部海龟移动并根据玩家输入不断更新,而顶部海龟向前和向后移动并根据特定间隔进行更新。
import turtle
from time import sleep
from turtle import Screen, Turtle
screen = turtle.Screen()
screen.title("Turtle Test")
screen.bgcolor("grey")
screen.setup(width=630, height=630)
screen.tracer(0)
turtle_a = turtle.Turtle()
turtle_a.speed(0)
turtle_a.shape("square")
turtle_a.color("white")
turtle_a.penup()
turtle_b = turtle.Turtle()
turtle_b.speed(0)
turtle_b.shape("square")
turtle_b.color("black")
turtle_b.penup()
turtle_b_speed = 10
def go_left():
x = turtle_b.xcor()
x -= turtle_b_speed
turtle_b.setx(x)
def go_right():
x = turtle_b.xcor()
x += turtle_b_speed
turtle_b.setx(x)
screen.listen()
screen.onkeypress(go_left, "Left")
screen.onkeypress(go_right, "Right")
direct = 5
while True:
turtle_a.goto(turtle_a.xcor() + direct, turtle_a.ycor())
sleep(0.5)
if turtle_a.xcor() >= 310:
direct = -5
if turtle_a.xcor() <= -310:
direct = 5
# update function
解决方案
你知道当你两次导入turtle时你已经走错了路,两种不同的方式以及sleep()
在像turtle这样的基于事件的环境中使用:
import turtle
from time import sleep
from turtle import Screen, Turtle
您也不应该while True:
在基于事件的环境中使用循环,而应该使用计时器事件。以下是修复这些问题的代码的重写。由于您从未为两只海龟设置 Y 坐标,因此没有“顶部”或“底部”,只有两只海龟相互移动:
from turtle import Screen, Turtle
def go_left():
x = turtle_b.xcor() - turtle_b_speed
if -300 <= x <= 300:
turtle_b.setx(x)
def go_right():
x = turtle_b.xcor() + turtle_b_speed
if -300 <= x <= 300:
turtle_b.setx(x)
def move_a():
global turtle_a_direct
turtle_a.setx(turtle_a.xcor() + turtle_a_direct)
if not -300 <= turtle_a.xcor() <= 300:
turtle_a.undo()
turtle_a_direct *= -1
screen.ontimer(move_a, 500)
screen = Screen()
screen.title("Turtle Test")
screen.bgcolor('grey')
screen.setup(width=640, height=640)
turtle_a = Turtle('square')
turtle_a.speed('fastest')
turtle_a.color('white')
turtle_a.penup()
turtle_a_direct = 5
turtle_b = Turtle('square')
turtle_b.speed(0)
turtle_b.color('black')
turtle_b.penup()
turtle_b_speed = 10
screen.onkeypress(go_left, 'Left')
screen.onkeypress(go_right, 'Right')
screen.listen()
move_a()
screen.mainloop()
既然你调用了onkeypress()
,我假设 Python 3.
推荐阅读
- excel - 在 ROW 中查找特定值并在水平相邻单元格中查找值
- algorithm - Glibc 字符串操作函数的算法复杂度
- python - 如何使用python在现有csv文件的新列中的单行中写入多个数据
- c# - c# LINQ 返回所有连接的结果
- javascript - 如何在 jQuery dataTables 列中添加一些信息
- azure - 在 azure 中部署功能应用程序时出现错误
- react-native - React Native - 运行命令“react-native unlink”时出错
- php - 如何将 n 天才支付网关集成到 Laravel
- r - as.POSIXlt.character 在 1975-04-01 失败
- javascript - 查找从特定位置开始的数组索引