python - 在关闭跟踪器的 Python 乌龟中,有没有办法在不使用 screen.update() 的情况下更新屏幕?
问题描述
我是 Python 编程新手。大约三周前,我使用海龟模块完成了俄罗斯方块克隆来测试我的技能。我的印象是,当我关闭动画跟踪器时,我必须使用该update()
方法手动更新窗口。昨天,在使用 turtle 模块编写蛇克隆时,我不得不向朋友解释为什么我要手动更新屏幕。为了证明,我打开了俄罗斯方块并注释掉了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()
行被注释掉,它不应该工作,但不知何故。代码有点长,我是这个网站的新手,所以我不知道完全发布它是否会被认为是坏的或粗鲁的。感谢您阅读本文,对于糟糕的英语和混乱的代码感到抱歉。
解决方案
一些海龟命令调用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()
是:
不要以为有人会为你打电话
不要假设你是唯一一个调用它的人
这不仅适用于 Python 乌龟。我的建议是,把你的update()
电话放在你认为你需要它们的地方,否则未来的turtle更新可能会破坏你的代码。
推荐阅读
- python-3.x - 超时前未收到 SNMP 响应 - 带有非常基础的示例示例
- wireshark - 使用特定wireshark版本的editcap
- qt - qml:如何格式化列表视图的列
- r - 使用正则表达式从 R 中的 pdf 中提取链接
- python - 例如,如何使用 BeagleBoard 的 PRU 进行矩阵乘法?
- javascript - 反应:我怎样才能控制一个列表与状态?
- scala - 类中的一些方法通过错误“不是 org.deeplarning4j 的成员”
- python - 如何解决“NotADirectoryError:[Errno 20] 不是目录:”?
- ruby-on-rails - OmniContacts 导轨
- docker - Liferay Container 无法使用自定义 server.xml 启动