Pygameでマウスを使って直線を描画してみよう
前回はマウスのボタンを押した時に、円の色を変えるプログラムを作りました。
今回はマウスの左ボタンを押しながらカーソルを動かすと、直線が描画されるプログラムを作ってみましょう。
直線は一本だけではなく、複数本描画できるようにします。
また、マウスの右ボタンを押すと、それまで描画した直線を全て消えるようにします。
マウスのボタンを押している間、直線を描くプログラム
直線を描画するプログラムは、以下のようになります。
ポイントはボタンが押されている状態かどうかの判定ですが、これはフラグを使って管理します。
左ボタンを押した時にフラグがオン、左ボタンを離した時にフラグがオフになります。
左ボタンを離すと、その位置の情報を取得して線分リストに追加します。
そして、線分リストに設定された位置情報を元に、線分を画面に描画していきます。
右ボタンを押すと、線分リストの内容をclear()メソッドを使って削除します。
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 60 61 62 63 64 65 66 67 68 69 70 71 72 |
### インポート import sys import pygame from pygame.locals import * ### 定数 WIDE = 640 # 画面横サイズ HIGHT = 400 # 画面縦サイズ W_TIME = 10 # 待ち時間 THICK = 5 # 線分の太さ ### 変数初期化 flag = 0 # ボタン押下フラグ line = [] # 線分リスト ### 画面初期化 pygame.init() surface = pygame.display.set_mode((WIDE, HIGHT)) ### 無限ループ while True: ### 画面描写 surface.fill((0,0,0)) for pos in line: pygame.draw.line(surface, (255,255,255), (pos[0],pos[1]), (pos[2],pos[3]), THICK) pygame.display.update() pygame.time.wait(W_TIME) ### イベント取得 for event in pygame.event.get(): ### マウス左ボタンダウンイベント if event.type == MOUSEBUTTONDOWN: ### 左ボタン押下は線分情報設定 if event.button == 1: ### フラグON flag = 1 ### マウス位置取得 x1,y1 = event.pos ### リストに追加 line.append([x1,y1,x1,y1]) ### 右ボタン押下は線分情報クリア elif event.button == 3: line.clear() ### マウス移動イベント if flag == 1 and event.type == MOUSEMOTION: ### マウス位置取得 x2,y2 = event.pos last = len(line) - 1 line[last] = [x1,y1,x2,y2] ### マウスボタンアップイベント if event.type == MOUSEBUTTONUP and event.button == 1: ### フラグOFF flag = 0 x2,y2 = event.pos line.append([x1,y1,x2,y2]) ### 終了処理 if event.type == QUIT: pygame.quit() sys.exit() |
マウスの左ボタンを押しながらカーソルを動かして直線を描きます。
また、マウスの右ボタンを押すと、描画した直線はクリアされます。
pygameのマウス操作に関しては、英語ですが以下のpygame公式サイトを参照してください。