Pygame:"pygame.Surface.fill()" 后无法在屏幕上绘制任何内容
Pygame: Can't draw anythin on screen after "pygame.Surface.fill()"
我正在尝试制作国际象棋游戏,但遇到了一个问题:
我正在尝试使用 pygame.Surface.fill(black_sc) 更新每个 'tick' 的显示。
但结果,我似乎无法在现在的黑屏上绘制任何东西:
#GAME LOOP
while True:
screen.fill(black_sc)
#SQUARE DRAWING LOOP
s_draw_loop()
#DRAW THE PIECES
draw_pieces()
m_pos = pygame.mouse.get_pos()
for x in pygame.event.get():
if x.type == pygame.QUIT or pygame.key.get_pressed()[pygame.K_ESCAPE] == True:
exit()
if x.type == pygame.MOUSEBUTTONDOWN:
for space in range(len(rect_database)):
if rect_database[space].collidepoint(m_pos) == True:
print(space)
pygame.display.flip()
这是 s_draw_loop():
class s_draw_loop():
s_posx = 0
s_posy = 0
s_w = size[0] / 8
s_h = size[1] / 8
row = 0
i = 0
while i < 64:
if i % 2 == 0:
if row % 2 == 0:
current_rect = pygame.Rect(s_posx, s_posy, s_w, s_h)
screen.fill(white, current_rect)
else:
current_rect = pygame.Rect(s_posx, s_posy, s_w, s_h)
screen.fill(black,current_rect)
s_posx += s_w
i += 1
else:
if row % 2 == 0:
current_rect = pygame.Rect(s_posx, s_posy, s_w, s_h)
screen.fill(black,current_rect)
else:
current_rect = pygame.Rect(s_posx, s_posy, s_w, s_h)
screen.fill(white,current_rect)
s_posx += s_w
i += 1
if i % 8 == 0:
s_posx = 0
s_posy += s_h
row += 1
除非您需要,否则我将免除您绘制零件的整个功能,但它基本上只是使用 pygame.Surface.blit() 将图片绘制到显示器上。
我试过将 'drawing functions' 包含在游戏循环本身中,但似乎没什么区别。
Here's the output when including 'screen.fill(black_sc)'
And here it is when commenting 'screen.fill(black_sc)' out
因为s_draw_loop
是一个class,不是一个函数。
s_draw_loop
里面的绘图代码只执行一次,在进入游戏循环之前,当python运行时读取class.
的代码时
在你的游戏循环中调用 s_draw_loop()
实际上什么都不做(除了创建一个什么都不做的 class 的无用实例)。
简单改变
class s_draw_loop():
...
到
def s_draw_loop():
...
因此 s_draw_loop
中的代码每帧都会执行。
我正在尝试制作国际象棋游戏,但遇到了一个问题: 我正在尝试使用 pygame.Surface.fill(black_sc) 更新每个 'tick' 的显示。 但结果,我似乎无法在现在的黑屏上绘制任何东西:
#GAME LOOP
while True:
screen.fill(black_sc)
#SQUARE DRAWING LOOP
s_draw_loop()
#DRAW THE PIECES
draw_pieces()
m_pos = pygame.mouse.get_pos()
for x in pygame.event.get():
if x.type == pygame.QUIT or pygame.key.get_pressed()[pygame.K_ESCAPE] == True:
exit()
if x.type == pygame.MOUSEBUTTONDOWN:
for space in range(len(rect_database)):
if rect_database[space].collidepoint(m_pos) == True:
print(space)
pygame.display.flip()
这是 s_draw_loop():
class s_draw_loop():
s_posx = 0
s_posy = 0
s_w = size[0] / 8
s_h = size[1] / 8
row = 0
i = 0
while i < 64:
if i % 2 == 0:
if row % 2 == 0:
current_rect = pygame.Rect(s_posx, s_posy, s_w, s_h)
screen.fill(white, current_rect)
else:
current_rect = pygame.Rect(s_posx, s_posy, s_w, s_h)
screen.fill(black,current_rect)
s_posx += s_w
i += 1
else:
if row % 2 == 0:
current_rect = pygame.Rect(s_posx, s_posy, s_w, s_h)
screen.fill(black,current_rect)
else:
current_rect = pygame.Rect(s_posx, s_posy, s_w, s_h)
screen.fill(white,current_rect)
s_posx += s_w
i += 1
if i % 8 == 0:
s_posx = 0
s_posy += s_h
row += 1
除非您需要,否则我将免除您绘制零件的整个功能,但它基本上只是使用 pygame.Surface.blit() 将图片绘制到显示器上。
我试过将 'drawing functions' 包含在游戏循环本身中,但似乎没什么区别。
Here's the output when including 'screen.fill(black_sc)'
And here it is when commenting 'screen.fill(black_sc)' out
因为s_draw_loop
是一个class,不是一个函数。
s_draw_loop
里面的绘图代码只执行一次,在进入游戏循环之前,当python运行时读取class.
在你的游戏循环中调用 s_draw_loop()
实际上什么都不做(除了创建一个什么都不做的 class 的无用实例)。
简单改变
class s_draw_loop():
...
到
def s_draw_loop():
...
因此 s_draw_loop
中的代码每帧都会执行。