在python或透明曲面中更新曲面的一部分

时间:2009-07-02 06:03:39

标签: python pygame

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

或者,我可以制作一个完全透明的表面,除了文字,这样你就可以看到下面的绘图表面了吗?

2 个答案:

答案 0 :(得分: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()

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

答案 1 :(得分: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是您的主要表面显示。