使用乌龟进行鬼影

时间:2019-05-17 16:01:31

标签: python turtle-graphics

在运行我的脚本时,在屏幕中央短暂停留一秒钟会生成GIF或绘画标记(这两个都包含在我的代码中),然后再移至指定位置。为什么? penup()函数不能解决此问题吗?

我正在尝试循环播放GIF,以便它在屏幕上更新和跟踪,同时保持其他资产不变。这会引起某种刷新问题吗?

我已经尝试过hideturtle(),但这隐藏了我生成的内容,而不是屏幕中心的原始提示。

# Baikonur Cosmodrome

lat = 45.86
lon = 63.31
location = turtle.Turtle()
location.penup()
location.color('yellow')
location.goto(lon, lat)
location.dot(5)
location.hideturtle()
url = 'http://api.open-notify.org/iss-pass.json'
url = url + '?lat=' +str(lat) + '&lon=' + str(lon)
response = urllib.request.urlopen(url)
result = json.loads(response.read())
over = result['response'][1]['risetime']
style = ('Arial', 6, 'bold')
location.write(time.ctime(over), font=style)
turtle.hideturtle()

def Spacestation_Tracking():

url = 'http://api.open-notify.org/iss-now.json'
response = urllib.request.urlopen(url)
result = json.loads(response.read())

location = result['iss_position']
lat = float(location['latitude'])
lon = float(location['longitude'])
print ('latitude: ', lat)
print ('longitude: ', lon)

#Draw the map and the ISS ontop of it the ISS will move to the go to coordinates
screen = turtle.Screen()
screen.setup(1980,1020)
screen.setworldcoordinates(-180, -90, 180, 90)
screen.bgpic('world3.png')
screen.register_shape('iss3.gif')
iss = turtle.Turtle()
iss.shape('iss3.gif')
iss.setheading(90)

iss.penup()
iss.goto(lon, lat)
time.sleep(5)
while True:
Spacestation_Tracking()     

在关闭窗口之前没有错误消息,因为目前无法中断程序。我期望给定的坐标上会出现一个干净的点,并且GIF会移动和刷新而不会每次都回到中心。

我正在Windows 10上使用Python for Windows下载版本3.7.3进行编码

1 个答案:

答案 0 :(得分:0)

一旦turtle.Turtle()返回,乌龟就可见了,penup()太迟了一步。我推荐的是:

lat = 45.86
lon = 63.31

location = turtle.Turtle(visible=False)
location.penup()
location.color('yellow')
location.goto(lon, lat)
location.dot(5)

这消除了在hideturtle()之后进行dot()调用的需要,因为乌龟已经被隐藏并且dot()方法不需要乌龟可见。同样,我建议:

iss = turtle.Turtle(visible=False)
iss.shape('iss3.gif')
iss.penup()
iss.setheading(90)
iss.goto(lon, lat)
iss.showturtle()

隐藏所有乌龟配置,最后致电showturtle()以显示成品。

但是,由于示例代码未正确缩进,因此很难确定,例如:

screen = turtle.Screen()
screen.setup(1980,1020)
screen.setworldcoordinates(-180, -90, 180, 90)
screen.bgpic('world3.png')
screen.register_shape('iss3.gif')
iss = turtle.Turtle()
iss.shape('iss3.gif')

不属于循环,也不属于称为重复的函数。它们应该是您的设置代码的一部分,并且只能被称为一次