レッスン 1 Pygame の概要
Pygame は、Python で 2-D ゲームを作成するために一般的に使用されるゲーム ライブラリです。衝突検出、サウンドと音楽、グラフィックス、イベントシステムなど、多くの重要な機能を備えています。
Pygameのインストール
Pygame コードを紹介する前に、まずそれをダウンロードしてインストールする必要があります。最も簡単で一般的な方法は、以下の pip コマンドを使用することです。
pip install pygame
Pygameウィンドウを作成する
どの Pygame アプリケーションでも、最初に行う必要があるのはウィンドウを作成することです。
#导入pygame模块
import pygame
#退出窗口程序时用到,帮助程序成功退出
import sys
#初始化Pygame引擎,所有 pygame 应用程序中都是必须
pygame.init()
#配置窗口大小
SCREEN_SIZE = WIDTH,HEIGHT = 400,300
#创建一个“屏幕”或“Surface”对象
screen = pygame.display.set_mode(SCREEN_SIZE)
pygame.display.set_mode() メソッドのプロトタイプ:
set_mode(size=(0, 0), flags=0, depth=0, display=0, vsync=0) -> Surface
上記のコードは、幅 400 ピクセル、高さ 300 ピクセルのウィンドウを作成します。実行すると、ウィンドウが点滅します。これは、プログラムがすでに完了まで実行されているためです。
ゲームループを設定する
ゲーム ループは、ウィンドウを閉じるイベントを受信した場合にのみ停止する無限ループです。
ゲームループの流れ:
- イベント処理
- ゲーム状態の処理
- ゲームオブジェクトを画面に描画します
while True:
## 事件处理
## 游戏状态处理
## 绘制游戏对象到屏幕
pygame.display.update()
イベント処理
次のコードを実行すると、ウィンドウを閉じたいときに閉じられない問題が発生します。
import pygame
import sys
pygame.init()
SCREEN_SIZE = WIDTH,HEIGHT = 400,300
screen = pygame.display.set_mode(SCREEN_SIZE )
while True:
## 事件处理
## 游戏状态处理
## 绘制游戏对象到屏幕
pygame.display.update()
これは、まだイベントを処理するように書いていないためです。
pygame.event.get() を使用してすべてのイベントを返し、イベントを走査して QUIT イベントがあるかどうかを検出します。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
上記のコードでは、各イベントの type プロパティをチェックすることで、QUIT イベントを正常に検出しました。次に、クリーンなシャットダウンに必要な 2 つの関数、pygame.quit() と sys.exit() を呼び出します。(必ず最初に pygame.quit() を呼び出してください)
画面上に描画する
次に、画面上に緑色の四角形を描画します。pygame.Surface オブジェクトを使用します。
サーフェスコンストラクター
Surface((width, height), flags=0, depth=0, masks=None) -> Surface
Surface((width, height), flags=0, Surface) -> Surface
サーフェスの fill() メソッド
Surface.fill(color, rect=None, special_flags=0) -> Rect
#1.创建一个宽度=50 ,高度=50的Surface对象
surface = pygame.Surface((50, 50))
#2.调用fill() 方法填充Surface对象,color参数是一个(R,G,B)元组,元组中的每个值都在 0 – 255 之间
surface.fill((0,255,0))
完全なコードは次のとおりです。
import pygame
import sys
pygame.init()
SCREEN_SIZE = WIDTH,HEIGHT = 400,300
GREEN = ( 0, 255, 0)
screen = pygame.display.set_mode(SCREEN_SIZE )
surface = pygame.Surface((50, 50))
surface.fill(GREEN)
while True:
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
#将绘制的surface对象绘制到screen指定位置上
screen.blit(surface, (175, 125))
pygame.display.update()
画面の仕組みを学ぶ
ここで注意すべき点は、ゲーム ループの各反復でこの Surface オブジェクトが画面に描画されるということです。この場合、静止したオブジェクトを描画するだけなので必須ではありません。
しかし、適切な背景と動くスプライトがあるほとんどの場合、反復のたびにすべてを再レンダリングする必要があります。
Pygame ウィンドウはアートボードのようなものです。中央に正方形を描き、それを左に 100 ピクセル移動すると、2 つの正方形ができます。これは、画面に正方形を 2 回描画しているためです。
以下のコードはこれを示しています。(キーボードイベントのコードについては、キーボードイベントのチュートリアルで説明しますので、心配する必要はありません)
import pygame
import sys
pygame.init()
SCREEN_SIZE = WIDTH,HEIGHT = 400,300
GREEN = (0,255,0)
screen = pygame.display.set_mode(SCREEN_SIZE )
surface = pygame.Surface((50, 50))
surface.fill(GREEN)
x = 100
y = 100
while True:
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
x += 20
screen.blit(surface, (x,y))
pygame.display.update()
「右矢印キー」を複数回押すと、画面上に複数の四角が表示されます。
解決策: ウィンドウの背景色を元の黒に戻すことで、元の製図板上の画像を消去するのと同じになり、この問題は解決できます。
import pygame
import sys
pygame.init()
SCREEN_SIZE = WIDTH,HEIGHT = 400,300
GREEN = (0,255,0)
screen = pygame.display.set_mode(SCREEN_SIZE )
surface = pygame.Surface((10, 10))
surface.fill((0,255,0))
x = 100
y = 100
while True:
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
x += 20
#填充窗口颜色
screen.fill((0,0, 0))
#绘制正方形
screen.blit(surface, (x,y))
pygame.display.update()
他の作業を行う前に必ず背景をペイントしてください。最初に正方形を描画してから背景を描画すると、正方形が覆われてしまいます。