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

Python 有没有一种方法可以在函数调用后使用Pygame库绘制rect?按下按钮后,python,pygame,Python,Pygame,我正在构建一个小游戏,它类似于一个旧的街机游戏,在那里你可以堆叠块。我想做的是,在每次按下空格键后,程序都会在屏幕上的任何地方画一个块,当块从左向右移动时,我恰好碰到空格键,反之亦然。在我按下空格键并使用它们绘制一个新的块后,我设法在块所在的位置获得当前坐标,同时新块在屏幕中向上移动 这是我用来查看传递内容的控制台的打印输出 second space key pressed next_block() 228 660 second space key pressed next_block() 11

我正在构建一个小游戏,它类似于一个旧的街机游戏,在那里你可以堆叠块。我想做的是,在每次按下空格键后,程序都会在屏幕上的任何地方画一个块,当块从左向右移动时,我恰好碰到空格键,反之亦然。在我按下空格键并使用它们绘制一个新的块后,我设法在块所在的位置获得当前坐标,同时新块在屏幕中向上移动

这是我用来查看传递内容的控制台的打印输出

second space key pressed
next_block() 228 660
second space key pressed
next_block() 11 600
second space key pressed
next_block() 18 540

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

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

创建块坐标数组(
blocks=[]
)。按下空格键后,将当前坐标添加到数组(
blocks.append((sq_x,sq_y))
)。在主应用程序循环中的
for
-循环中,在数组中排序的坐标处绘制块:

blocks=[]
碰撞时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出
sys.exit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
打印(“按下第二个空格键”)
#将坐标存储在块中
块。附加((sq_x,sq_y))
#每次按空格键后移动块-60
sq_y-=60
游戏显示。填充(黑色)
#在列表中绘制块
对于区块中的pos:
pygame.draw.rect(游戏显示,黄色块,[*pos,240,60])
#绘制位于窗口底部的初始块
pygame.draw.rect(游戏显示,蓝色块,[sq_x,sq_y,240,60])

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

创建块坐标数组(
blocks=[]
)。按下空格键后,将当前坐标添加到数组(
blocks.append((sq_x,sq_y))
)。在主应用程序循环中的
for
-循环中,在数组中排序的坐标处绘制块:

blocks=[]
碰撞时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出
sys.exit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
打印(“按下第二个空格键”)
#将坐标存储在块中
块。附加((sq_x,sq_y))
#每次按空格键后移动块-60
sq_y-=60
游戏显示。填充(黑色)
#在列表中绘制块
对于区块中的pos:
pygame.draw.rect(游戏显示,黄色块,[*pos,240,60])
#绘制位于窗口底部的初始块
pygame.draw.rect(游戏显示,蓝色块,[sq_x,sq_y,240,60])
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)