1. ホーム
  2. スクリプト・コラム
  3. パイソン

PygameのDraw関数の具体的な使用方法

2022-01-28 20:37:34

Pygameには、長方形、多角形、円、直線、円弧などの単純な図形を描画するためのdrawモジュールが用意されています。

pygame.drawモジュールの共通メソッドは以下の表のとおりです。

<テーブル メソッド 説明 pygame.draw.rect()  矩形を描画する pygame.draw.polygon()を実行します。  ポリゴンを描画する pygame.draw.circle()を実行します。  中心と半径を基準に円を描画する pygame.draw.ellipse()を実行します。  楕円を描画する pygame.draw.arc()  円弧を描画する(楕円の一部を波打たせる) pygame.draw.line()  線分(直線)を描画する pygame.draw.lines()  複数の連続した線分を描画する pygame.draw.aaline()を実行します。  滑らかな線分を描画する(アンチエイリアス) pygame.draw.aalines()  複数の連続した線分を描画する

表中の関数は、いずれも Surface オブジェクトに何らかの簡単な図形を描画し、その戻り値として、実際に描画された矩形領域を表す Rect オブジェクトを返すという点で、共通しています。上記の描画関数はすべてカラーパラメータを提供し、カラーパラメータの値は3つの方法のうちの1つで渡すことができます。

  • pygame.colorオブジェクトを使用する
  • RGBのトリプレット
  • RGBAクォータニオン

上記のいくつかのメソッドのパラメータについて、以下を通じて詳しく説明する。

1) 矩形を描く

矩形を描画するための構文形式は以下の通りです。

# Open NLTK downloader

パラメータは以下のように記述されています。

  • surface:メインゲームウィンドウを指し、特別な事情がない限り一般的にメインスクリーンに描画されます。
  • color: このパラメータは、このグラフィックをカラー化するために使用されます。
  • rect: 描画されるグラフの位置と大きさです。
  • width: 枠線の幅を指定するオプションのパラメータ。デフォルトは 0 で、矩形領域が塗りつぶされることを示します。

なお、width > 0 の場合はワイヤーフレームの幅を示し、width < 0 の場合はこの時点ではグラフィックを描画しない。

2) ポリゴンの描画

import nltk

ここで、points は多角形の頂点を構成する3つ以上の (x,y) 座標を表すリスト引数で、タプルまたはリストとして指定します。残りの引数は、上の関数と同じです。

3) 円を描く

nltk.download()

上記のパラメーターの意味は以下の通りです。

  • pos: このパラメータで指定する円の中心の位置。
  • radius: 指定に使用する円の半径。

4) 楕円を描く

raw.githubusercontent.com

楕円を描く処理は、実際には長方形の領域(Rect)の中に内側の楕円を描くことになりますが、それ以外のパラメータの意味は上記と同じです。

5) 円形曲線の描画

円弧の曲線を描く必要がある場合、以下のような構文形式の関数を使用します。

pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=1)

楕円関数に比べ、引数を2つ多く取る。

  • start_angle は、セグメントの円弧の開始角度です。
  • stop_angle は終了角度です。

いずれもラジアン表示で、原点は直方体のRectの中心である。

6)直線を引く

Drawモジュールでは、直線を引く際にギザギザを消すかどうかという2種類の方法と、状況に応じて1本または複数本の直線を引くというオプションが用意されています。

pygame.draw.line(surface, color, start_pos, end_pos, width=1)


パラメータの説明です。

  • start_pos と end_pos は線分の開始位置を示し、[x,y] が開始位置を示す。
  • width =1 は線の幅で、デフォルトは 1 です。

ジャギーを排除した滑らかな線を描く場合は、以下のようにblend = 1パラメータを使用します。

pygame.aaline(surface, color, startpos, endpos, blend=1) 


ブレンドパラメータは、ブレンドされた背景の影を描くことでアンチエイリアスを実現することを示しています。

7) 複数のダイレクトを描く

複数の直線を引く必要がある場合は、以下の方法で対応します。

pygame.lines(surface, color, closed, pointlist, width=1)


ここで、pointlistとclosedは以下の意味を持つ。

  • pointlist: 引数は、いくつかの点の列の座標を含むリストである。
  • closed: ブール型の引数で、Trueに設定すると、直線の最初の端点と最後の端点が始点と終点で結合されることを示す。

アンチエイリアスのかかった直線を描く場合は、以下の方法で描画してください。

pygame.draw.aalines(surface, color, closed, pointlist, blend=1)


ブレンド=1が指定されている以外は、上記の関数と同じ意味です。

上記の描画方法を簡単な例で示す。

import pygame
from math import pi
#initialize
pygame.init()
# Set the main screen size
size = (500, 450)
screen = pygame.display.set_mode(size)
# Set the title
pygame.display.set_caption("C language Chinese web")
# Set a variable that controls the main loop
done = False
# Create a clock object
clock = pygame.time.Clock()
while not done:
    # Set the fps of the game
    clock.tick(10)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True # If closed window is detected, then set done to True
    # Draw a red diagonal line with a width of 3
    pygame.draw.line(screen, (0, 255, 0), [0, 0], (500, 450), 3)
    # Draws multiple blue lines (continuous lines, non-aliased), False means the first and last lines are not connected
    pygame.draw.lines(screen, (0, 0, 255), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 1)
    # Draw a gray rectangular area, filling the area with gray
    pygame.draw.rect(screen, (155, 155, 155), (75, 10, 50, 20), 0)
    # Draw a rectangular area with a wireframe width of 2
    pygame.draw.rect(screen, (0, 0, 0), [150, 10, 50, 20],2)
    # Draw an ellipse with a line width of 2
    pygame.draw.ellipse(screen, (255, 0, 0), (225, 10, 50, 20), 2)
    # Draw a solid red oval
    pygame.draw.ellipse(screen, (255, 0, 0), (300, 10, 50, 20))
    # Draw a triangle with a green border (width 2)
    pygame.draw.polygon(screen, (100, 200, 45), [[100, 100], [0, 200], [200, 200]], 2)
    # Draw a solid blue circle, where [60,250] indicates the location of the center, 40 is the radius, and width defaults to 0
    pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40)
    # Draw an arc, where 0 is the start of the arc, pi/2 is the end of the arc, and 2 is the width of the line
    pygame.draw.arc(screen, (255, 10, 0), (210, 75, 150, 125), 0, pi / 2, 2)
    # Refresh the display screen
    pygame.display.flip()
# Click close to exit the pygame program
pygame.quit()

プログラムは以下のように実行されます。


図1:Pygameの描画関数の使い方

PygameのDraw関数の具体的な使い方の紹介は以上です。Pygame Draw の詳細については、Script House の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。