1

我有一个用 python 编写的应用程序,它基本上是一个 etch-a-sketch,你用 WASD 和箭头键移动像素,它会留下痕迹。但是,我想为屏幕上的像素数量添加一个计数器。如何在不更新整个表面和 pwning 像素图的情况下更新计数器?

或者,我可以制作一个除文本外完全透明的表面,以便您可以看到下面的绘图表面吗?

4

2 回答 2

1

为了解决这个问题,您需要为 Etch-a-Sketch 像素提供一个单独的表面,这样当您刷新屏幕时它们就不会被破坏。不幸的是,使用 Rigo 的方案,字体将继续在自身之上渲染,这将在超过两个像素数更改时变得混乱。

所以,这里有一些示例渲染代码:

# Fill background
screen.fill((0xcc, 0xcc, 0xcc))
# Blit Etch-a-Sketch surface (with the drawing)
# etch_surf should be the same size as the screen
screen.blit(etch_surf, (0, 0))
# Render the pixel count
arial = pygame.font.SysFont('Arial', 20)
counter_surf = arial.render(str(pixel_count), True, (0, 0, 0))
screen.blit(counter_surf, (16, 16))
# Refresh entire screen
pygame.display.update()

现在,诚然,更新整个屏幕的效率相当低。为此,您有两个选择:仅在图纸更改时刷新屏幕或跟踪图纸更改的位置并刷新各个位置(请参阅更新文档)。如果选择第二个选项,则必须刷新文本以及之前的位置;我建议让Sprite管理它。

于 2009-07-13T06:00:04.380 回答
0

你需要的是 pygame.font 模块

#define a font surface 
spamSurface = pygame.font.SysFont('Arial', 20)

#then, in your infinite cycle...   
eggsPixels = spamSurface.render(str(pixelsOnScreen), True, (255, 255, 255))
hamDisplay.blit(eggsPixels, (10, 10))

哪里spamSurface是新的字体表面,eggsPixelsspamSurface将呈现(显示/显示)的值,并且hamDisplay是您的主要表面显示。

于 2009-07-02T06:35:37.587 回答