免责声明:我绝不是python编码或pygame使用方面的Maven。
我正在用mysql数据库中的对象填充屏幕。这些对象有各种属性,很明显是图像、宽度、高度、x&y等等。它们在我运行脚本时出现。
但是,当我在表中更新这些值时,我希望它们在脚本运行时发生变化。以下是我当前运行的代码:
def get_object():
cursor1 = database.mydb.cursor(buffered=True)
cursor1.execute("SELECT * FROM objects")
myresult1 = cursor1.fetchall()
for x in myresult1:
img = pygame.image.load('assets\objects' + x[1])
display.blit(img, (x[3], x[4]))
print(x[3])
def refresh():
get_object()
pygame.display.update()
我现在在一个简单的键上调用refresh(它最终会被自动调用)
def main_loop():
pygame.event.clear()
while not g_exit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
refresh()
display.fill(colors.goldenrod)
main_window()
avatar(display_width / 2, main_window_height + 10)
chat_window()
controls_window()
pygame.display.update()
main_loop()
就像我说的,对象很好地显示在屏幕上,当我更新值、关闭并重新运行时,它们会显示在新位置。我一辈子都不能在脚本运行时让它们更新。
1条答案
按热度按时间zujrkrfu1#
想想你的代码一步一步地做了什么:
在主循环中,它检查
K_LEFT
按下。如果是,它会呼叫
refresh()
refresh()
电话get_object()
get_object()
执行数据库查询并将内容绘制到屏幕上refresh()
通过调用pygame.display.update()
这一切都是徒劳的,因为当它返回到主循环时,下一步就是用display.fill(colors.goldenrod)
现在你的屏幕是纯色的您可以这样重构代码,例如: