在关闭跟踪器的情况下,有没有一种方法可以不使用creen.update()来更新屏幕? [英] In Python turtle, with tracer off, is there a way to update the screen without using screen.update()?

查看:11
本文介绍了在关闭跟踪器的情况下,有没有一种方法可以不使用creen.update()来更新屏幕?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新手,不熟悉使用Python编程。大约三周前,我使用海龟模块完成了一个俄罗斯方块的克隆,以测试我的技能。我的印象是,当我关闭动画跟踪程序时,我必须使用update()方法手动更新窗口。昨天,在用海龟模块编写一个克隆蛇的代码时,我不得不向一个朋友解释为什么我要手动更新屏幕。为了证明,我打开了俄罗斯方块,并注释掉了update()方法,以显示游戏不会运行。令我惊讶的是,它实际上起作用了,我搞不懂它是怎么做到的,因为如果没有update()方法,就连我的蛇代码都不能工作。

以下是俄罗斯方块代码主循环的一部分:

while not game_over:

if not current_piece.does_piece_fit(starting_row + 2, starting_column, current_piece.current_piece):
    game_over = True
wn.update()
movement()
marco.update_grid()
marco_next.show_next_piece(next_piece)
show_score()
current_piece.proyeccion()
marco_next.show_text(x_text_next_piece, y_text_next_piece, "Next Piece:", normal_style)
marco_next.show_text(x_text_hold, y_text_hold, "Hold:", normal_style)
show_instructions(x_text_instructions, y_text_instructions, instructions_text, smaller_style)

if holding:
    marco_hold.show_hold_piece(hold_piece)

如果wn.update()行被注释掉,它应该不起作用,但不知何故它起作用了。代码有点长,而且我是新来这个网站的,所以我不知道完全发布它对我来说是不是很糟糕或粗鲁。感谢您阅读本文,对于糟糕的英语和混乱的代码,我深表歉意。

推荐答案

某些Turtle命令调用update()独立于您的调用。有些像end_fill()直接做,有些像dot()通过它们调用的其他方法间接做:

from turtle import *

tracer(False)

dot(100)  # change 'dot' to 'forward' and run again

done()

如果您运行上面的命令,尽管调用tracer(False),您仍会得到一个点。如果将dot更改为forward,则将出现空白屏幕,除非您注释掉对tracer的调用。

我对update()的经验法则是:

  • 不要以为任何人都会为您打电话

  • 不要以为你是唯一一个这样认为的人

不仅仅是巨蟒海龟的情况。我的建议是,将您的update()调用放回您认为需要的地方,否则Turtle的未来更新可能会破坏您的代码。

这篇关于在关闭跟踪器的情况下,有没有一种方法可以不使用creen.update()来更新屏幕?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆