有没有一种方法可以在使用Pygame库的函数调用之后绘制rect?按下按钮后

时间:2019-11-24 15:38:41

标签: python pygame

我正在开发一款类似于旧街机游戏的小游戏,在该游戏中您可以堆叠积木。我想做的是每按一次空格键,程序就会在屏幕上的任意位置(从左向右移动,反之亦然)碰到空格键时绘制一个块。按下空格键后,我设法获取了当前块所在的当前坐标,并使用它们绘制了一个新坐标,同时新块在屏幕中向上移动。

这是我正在使用的控制台的打印输出,以查看通过了什么。

second space key pressed
next_block() 228 660
second space key pressed
next_block() 11 600
second space key pressed
next_block() 18 540
def game_loop():
    sq_x = 60
    sq_y = 660
    sq_change_x = 7
    bumped = True
    while bumped:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    print("second space key pressed")
                    # pass the current coords to next_block()
                    next_block(sq_x, sq_y)
                    # moves the block -60 after every space bar key press
                    sq_y -= 60

        gamedisplay.fill(black)
        # draws the initial block that is positioned at the bottom of the window
        pygame.draw.rect(gamedisplay, blue_block, [sq_x, sq_y, 240, 60])
        # boundaries so the block only is animated within the window
        sq_x += sq_change_x
        if sq_x > 360 or sq_x < 0:
            sq_change_x = sq_change_x * -1

        game_background()

        pygame.display.update()
        clock.tick(60)

这是应该在按键后绘制矩形的函数,但是它对屏幕没有任何作用。...它没有绘制任何东西。

def next_block(sq_x, sq_y):
    # gets called after the space key is press and draws a block at the given coords.
    pygame.draw.rect(gamedisplay, yellow_block, [sq_x, sq_y, 240, 60])

    print("next_block()", sq_x, sq_y)

有人可以帮助我理解为什么这种逻辑不起作用吗?该函数获取坐标,但不绘制任何东西。这只是我正在做的一个小项目。

1 个答案:

答案 0 :(得分:0)

您的逻辑不起作用,因为每一帧(return;)都会清除屏幕。
由于蓝色块是动态移动的,因此您必须在每帧中重新绘制整个场景(所有块)。

创建一个块坐标数组(gamedisplay.fill(black))。当按下 SPACE 时,然后将当前坐标添加到数组(blocks = [])。在主应用程序循环的blocks.append((sq_x, sq_y))循环中,按数组中排序的坐标绘制块:

for