python&pygame-updateselect语句移动对象

6tr1vspr  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(385)

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

就像我说的,对象很好地显示在屏幕上,当我更新值、关闭并重新运行时,它们会显示在新位置。我一辈子都不能在脚本运行时让它们更新。

zujrkrfu

zujrkrfu1#

想想你的代码一步一步地做了什么:
在主循环中,它检查 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()

相关问题