Pygame の collidepoint() メソッド

Maxim Maeder 2023年6月21日
Pygame の collidepoint() メソッド

この記事では、Pygame を使用して Python でテキストを描画する方法を示します。 これは、動作する Python ゲーム ウィンドウの完全なコードではありません。

最低限の作業フレームワークに興味がある場合は、この 記事 を確認してください。

Pygame で collidepoint() メソッドを使用する

rect クラスの collidepoint() メソッドでは、与えられた点が rect 内にあるかどうかをテストします。 次に、ホバーすると色が変わるボタンを作成します。

関数に x 座標と y 座標を別々に指定するか、タプルやリストなどのイテラブルで指定できます。

構文:

rect.collidepoint(x, y)
rect.collidepoint((x, y))

collidepoint() を使用して、表面にカーソルを合わせたときに表面の色を変更します。 これを設定するには、次のことを行います。

  1. collidepoint() メソッドを使用して rect を定義することから始めます。
  2. 指定された rect 幅と高さでサーフェスを作成して続行します。
  3. メイン ループの前に行う最後の作業は、2つの変数を作成することです。 1つは通常の色を表し、もう 1つはホバーの色を表します。
# Before Main loop
rect = pygame.Rect(10, 10, 100, 60)
btn_surface = pygame.Surface((rect.width, rect.height))

normal_color = (200, 100, 100)
hover_color = (100, 200, 100)

メイン ループでマウスの位置を取得し、それが rect 内にあるかどうかを確認します。

  1. マウスの位置を取得し、上で作成した rectcollidepoint() メソッドに渡します。
  2. マウスが上にあることが判明した場合は、ボタンの表面をホバー カラーで塗りつぶします。 それ以外の場合は、通常の色で塗りつぶします。
  3. 最後に、サーフェスをスクリーンにブリットします。
# In the Main loop
if rect.collidepoint(pygame.mouse.get_pos()):
    btn_surface.fill(hover_color)
else:
    btn_surface.fill(normal_color)

screen.blit(btn_surface, rect)

完全なコード:

# Imports
import sys
import pygame

# Configuration
pygame.init()
fps = 60
fpsClock = pygame.time.Clock()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))

# Before Main loop
rect = pygame.Rect(10, 10, 100, 60)
print(rect.width)
btn_surface = pygame.Surface((rect.width, rect.height))

normal_color = (200, 100, 100)
hover_color = (100, 200, 100)

# Game loop.
while True:
    screen.fill((20, 20, 20))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # In the Main loop
    if rect.collidepoint(pygame.mouse.get_pos()):
        btn_surface.fill(hover_color)
    else:
        btn_surface.fill(normal_color)

    screen.blit(btn_surface, rect)

    pygame.display.flip()
    fpsClock.tick(fps)

出力:

Pygame で collidepoint() メソッドを使用する

著者: Maxim Maeder
Maxim Maeder avatar Maxim Maeder avatar

Hi, my name is Maxim Maeder, I am a young programming enthusiast looking to have fun coding and teaching you some things about programming.

GitHub

関連記事 - Pygame Function