免责声明:我绝不是Python或Pygame编码方面的专家。
我正在用来自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()
我现在正在按下一个简单的按键来刷新(它最终会定时自动被调用)
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()
就像我说的那样,这些对象在屏幕上正常显示,并且当我更新值,关闭并重新运行时,它们会出现在新位置。我只是一辈子都无法让他们在脚本运行时进行更新。
答案 0 :(得分:1)
只需考虑您的代码一步一步做>
K_LEFT
。refresh()
refresh()
呼叫get_object()
get_object()
进行数据库查询并将内容绘制到屏幕上refresh()
通过调用pygame.display.update()
display.fill(colors.goldenrod)
填充整个屏幕您可以像这样重组代码,例如:
def get_objects():
cursor1 = database.mydb.cursor(buffered=True)
cursor1.execute("SELECT * FROM objects")
return cursor1.fetchall()
def draw_objects(display, myresult1):
for x in myresult1:
img = pygame.image.load('assets\objects' + x[1])
display.blit(img, (x[3], x[4]))
print(x[3])
def main_loop():
my_objects = []
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:
my_objects = get_objects()
display.fill(colors.goldenrod)
main_window()
avatar(display_width / 2, main_window_height + 10)
chat_window()
controls_window()
draw_objects(display, my_objects)
pygame.display.update()