四角形の色を変更しよう
前回は画面に四角形を表示するプログラムを作成しました。
今回は四角形の色を徐々に変えていくプログラムを作成します。
色の変更には、四角形オブジェクト.fill()の色合成オプション(special_flags)を使います。
四角形の色を変更するプログラム
以下のプログラムは、3つの四角形を色合成オプション(special_flags)を使って、徐々に色を重ねていきます。
使うオプションの値は、BLEND_ADDとBLEND_SUBです。
デフォルトの黒(0,0,0)からスタートして、それぞれ赤(1,0,0)、緑(0,1,0)、青(0,0,1)をBLEND_ADDで足していきます。
赤、緑、青は同じ割合で値を変えているので、代表して赤の位置にあるピクセルを参照して、値が255になったら逆にBLEND_SUBで引いていきます。
あとは、それの繰り返しです。
メモ
色の取得には surface.get_at() を使います。
戻り値はColorオブジェクトで、このプログラムでは赤の Color.r を参照しています。
ちなみに緑は Color.g、青は Color.b です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
### インポート import pygame from pygame.locals import * ### 定数 pos_red = (195, 10) # 赤左上座標 pos_green = (100, 75) # 緑左上座標 pos_blue = (290,140) # 青左上座標 rect_size = (250,250) # 四角形サイズ ### モジュール初期化 pygame.init() ### 画面設定 surface = pygame.display.set_mode((640,400)) ### 無限ループ while True: ### 四角形設定 rects = [] rects.append(pygame.Rect(pos_red, rect_size)) rects.append(pygame.Rect(pos_green, rect_size)) rects.append(pygame.Rect(pos_blue, rect_size)) ### 色設定(赤,緑,青) colors = [(1,0,0), (0,1,0), (0,0,1)] ### BLEND設定(赤ピクセルで判定) color = surface.get_at((pos_red)) if color.r == 0: blend = BLEND_ADD elif color.r == 255: blend = BLEND_SUB ### リスト分ループ for idx,rect in enumerate(rects): ### 四角形オブジェクト obj = surface.fill(colors[idx], rect, blend) ### 画面更新 pygame.display.update(obj) ### 一定時間停止 pygame.time.wait(5) ### イベント処理 for event in pygame.event.get(): if event.type == KEYDOWN and event.key == K_ESCAPE: break else: continue ### whileループ終了 break ### 終了処理 pygame.quit() |
プログラムを実行すると、以下の画像が表示されます。