2009-07-02 7 views
1

私は、基本的にはエッチ・スケッチのアプリケーションをPythonで書いています.WASDと矢印キーを使ってピクセルを移動し、それはトレイルを残します。しかし、私は画面上のピクセルの量のカウンタを追加したい。サーフェス全体を更新せずにピクセルの図面を動かすことなく、カウンタを更新するにはどうすればよいですか?Pythonまたは透明なサーフェスのサーフェスの一部を更新する

また、テキストを除いて完全に透明なサーフェスを作成して、その下に描画面が表示されるようにすることはできますか?あなたが必要なもの

答えて

0

spamSurfaceが新しいフォントの表面である

#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)) 

pygame.fontモジュールであり、eggsPixelsspamSurfaceは(表示/ショー)をレンダリングするとhamDisplayがあなたの主表面ディスプレイであることを値です。

+0

はい、これだけです。 eggsPixelはテキストを除いて透明で、(10,10)はカウンタ値が表示される位置です。 – Ralph

1

この問題を解決するには、Etch-a-Sketchピクセル用に別のサーフェスを使用して、画面を更新するときに邪魔にならないようにします。残念なことに、Rigoの方式では、フォントはそれ自身の上にレンダリングされ続けます。これは、2つ以上のピクセル数の変化に対して乱雑になります。今、確かに、画面全体を更新することは、むしろ非効率的である

# 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() 

だから、ここではいくつかのサンプルレンダリングコードです。このためには、図面が変更されたときに画面を更新するか、図面の変更箇所を追跡して個々の場所を更新するかの2つのオプションがあります(update documentation参照)。 2番目のオプションを選択した場合は、テキストを元に戻す必要があります。 Spriteをこれを管理することをお勧めします。

関連する問題