Pygame でマウスの動きを監視する方法

Pygame_pygameでキーボード キーを監視するメソッドはキーボード入力を取得します - CSDN ブログでは、キーボード アクションは while True ループでキュー内のイベントを取得することによって監視されると述べています。マウスの動きを監視することは、キーボードの動きを監視することと同じです。

関連接続 1 キューとイベントに関する関連知識については、を参照してください。

Pygame_pygame でキーボードのキーを監視する方法はキーボード入力を取得します - CSDN ブログ

1 マウスイベントの分類

キュー内のマウス イベントは主に、移動、押し、放すという 3 つのカテゴリに分類されます。これら 3 つのイベントに対応する値は、それぞれ MOUSEMOTION、MOUSEBUTTONDOWN、MOUSEBUTTONUP です。

2. マウス移動イベントの処理

マウス移動イベントを処理することで、図1に示すようなマウス座標のリアルタイム表示機能を実現します。

図1 マウス座標のリアルタイム表示

while True ループでは、まず pygame.event.get() でキューからイベントを取得し、if 文でイベントの種類を判定するコードは以下の通りです。

if event.type == MOUSEMOTION:

このとき、マウスが画面上を移動していることを意味しており、このとき、まず画面がそれまで表示されていた座標を覆うように塗りつぶされます。

screen.fill((0, 0, 255))

その後、表示する座標を構築します。

coordinate = '(%d,%d)'%event.pos

このうち、event.pos は現在のマウスの横座標と縦座標を含むタプルであり、最終的に構築されたマウス座標が画面に表示されます。

imgText = font.render(coordinate, True, (255,255,255))
screen.blit(imgText,event.pos)
pygame.display.update()

関連リンク2 フォントの使い方はこちらをご覧ください。

Pygame_pygame でキーボードのキーを監視する方法はキーボード入力を取得します - CSDN ブログ

3 マウスのプレスとリリースのイベント

マウスのプレスとリリースのイベントを監視することで、画面上に線を描画する機能を実現できます。つまり、図 2 に示すように、マウスを始点として押し、マウスを放した状態で直線を描きます。

図2 画面図

マウスが押されると、対応するイベントは MOUSEBUTTONDOWN となり、マウス座標が直線の始点として保存されます。

line_start = event.pos

マウスを離すと、対応するイベントは MOUSEBUTTONUP となり、このときのマウス座標が直線の終点として保存され、始点と終点に応じて pygame を通じて画面上に線が描画されます。 draw.line()メソッド。

line_end = event.pos
pygame.draw.line(screen, (255, 0, 0), line_start, line_end)
pygame.display.update()

このうち、pygame.draw.line() メソッドの最初のパラメータは指定された画面を表し、2 番目のパラメータは線の色を表し、3 番目と 4 番目のパラメータはそれぞれ線の始点と終点を表します。

4 完全なコード

上記の完全なコードを以下に示します。

import sys
import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((500, 200))
screen.fill((0, 0, 255))
pygame.display.update()
font = pygame.font.Font(None, 20)
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        if event.type == MOUSEMOTION:
            screen.fill((0, 0, 255))
            coordinate = '(%d,%d)'%event.pos
            imgText = font.render(coordinate, True, (255,255,255))
            screen.blit(imgText,event.pos)
            pygame.display.update()
        if event.type == MOUSEBUTTONDOWN:
            line_start = event.pos
        if event.type == MOUSEBUTTONUP:
            line_end = event.pos
            pygame.draw.line(screen, (255, 0, 0), line_start, line_end)
            pygame.display.update()

おすすめ

転載: blog.csdn.net/hou09tian/article/details/133386530