我正在开发一款类似于旧街机游戏的小游戏,在该游戏中您可以堆叠积木。我想做的是每按一次空格键,程序就会在屏幕上的任意位置(从左向右移动,反之亦然)碰到空格键时绘制一个块。按下空格键后,我设法获取了当前块所在的当前坐标,并使用它们绘制了一个新坐标,同时新块在屏幕中向上移动。
这是我正在使用的控制台的打印输出,以查看通过了什么。
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)
有人可以帮助我理解为什么这种逻辑不起作用吗?该函数获取坐标,但不绘制任何东西。这只是我正在做的一个小项目。
答案 0 :(得分:0)
您的逻辑不起作用,因为每一帧(return;
)都会清除屏幕。
由于蓝色块是动态移动的,因此您必须在每帧中重新绘制整个场景(所有块)。
创建一个块坐标数组(gamedisplay.fill(black)
)。当按下 SPACE 时,然后将当前坐标添加到数组(blocks = []
)。在主应用程序循环的blocks.append((sq_x, sq_y))
循环中,按数组中排序的坐标绘制块:
for