Python和Pygame-更新Select语句以移动对象

时间:2018-08-25 09:16:46

标签: python mysql pygame

免责声明:我绝不是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()

就像我说的那样,这些对象在屏幕上正常显示,并且当我更新值,关闭并重新运行时,它们会出现在新位置。我只是一辈子都无法让他们在脚本运行时进行更新。

1 个答案:

答案 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()