我正在创建一个应该在命令行上运行的游戏。游戏以文字为 Canvas (软件将文字打印成矩形,当文字变化时,图像也会随之变化)。我创建了一个小脚本来测试它是如何工作的
import os
# function for printing out the game display grid
def printgrid(input):
for i in range(len(input)):
for j in range(len(input[0]):
print(input[i][j], end='')
print('') # newline after each row
grid = [['#' for x in range(10)] for x in range(10)]
while (True):
# refresh the screen and reprint
os.system('clear')
printgrid(grid)
不幸的是,代码似乎打印网格的速度太慢,导致打印过程中出现明显的滚动效果,这会使游戏无法玩。
在 python 中有没有更快的打印文本的方法?
造成这种滚动效果的原因可能只是我没有对这段代码设置任何帧率上限,而它恰好在计算机显示器刷新时显示当前输出?
<- 如果我的方法完全错误,最好的方法是什么?
请您参考如下方法:
打印到控制台通常很慢,因为大多数语言倾向于等到消息显示后再继续。您当前的方法有多种解决方法。
如果您使用文件 API,通过 sys.stdout,您可以write() 任意多次并调用 flush() 当屏幕准备打印时。您也可以尝试尽可能少地调用 write(),或许可以在内存中构建字符串并将它们完整输出。
不过,绝对需要帧速率上限。控制台不是一个快速的界面,它不能做高帧率。实现上限,玩转数字。
简而言之:
- 尽可能少地调用
write() - 仅在准备好渲染时调用
flush() - 将帧速率限制在 10,然后 20,然后 30。实验
另一种绝对可以让您的游戏加速的方法是使用ncurses。有了它,您可以只更新需要重新渲染的屏幕部分,而不是重新打印整个屏幕。
