LoginSignup
3
0

More than 5 years have passed since last update.

Pygame 画像を読み込み、Spriteクラスで使用する

Last updated at Posted at 2018-10-12

目標:

  • pygame で画像を読み込みSpriteクラスで使用する

プロジェクトストラクチャー

  • project/ -- 全てを入れるフォルダ(ディレクトリ)
    • img/ -- 画像を保存するフォルダ(ディレクトリ)
      • player.png
    • app.py -- codeを書くファイル

インポートをしましょう

import pygame
import os
  • このosというモジュールは、自分が使っているコンピューターの情報を得るためのfunctionがたくさん入っているもの。今回はこのファイルへのパスを得るために使う。

# フォルダへのパスを変数に格納しよう
game_dir = os.path.dirname(__file__)
img_dir = os.path.join(game_dir, "img")

os.path.dirname
= osモジュールの中のpathモジュールの中のdirnameというfunctionを呼び出す。

__file__というのは実行されているファイル名が格納されている。
この場合だったら、app.py

これでgame_dirという変数に実行されているファイル(app.py)が含まれているフォルダ(direrctoryname)が格納される
この場合: project

そのgame_dirを早速使おう。
img_dir = os.path.join(game_dir, "img")
= osモジュールの中のpathモジュールの中のjoinというfunctionを呼び出す
joinfunctionは受けった引数を一つのパスへとつなげる
この場合: project/img/


次に、画像ファイルをpygameに読み込もう

player_img = pygame.image.load(
    os.path.join(img_folder, "player.png")).convert()

pygame.image.load().convert()
= 画像を読み込み(load())、pygameが扱いやすいように変換する(convert())。それをplayer_img変数に格納する。


次に、作ったplayer_imgPlayerクラスで使用しよう

以下がPlayerクラス

class Player(pygame.sprite.Sprite):
    # sprite for the Player
    def __init__(self):
        super().__init__()
        self.image = pygame.transform.scale(player_img, (50, 38))
        self.image.set_colorkey((0,0,0))
        self.rect = self.image.get_rect()

ここに注目は
self.image = pygame.transform.scale(player_img, (50, 38))
ここではtransformモジュールにあるscale()functionを使用する
scale([Surface], [サイズ])の引数
1. どのSurfaceに書くのか
2. どの大きさにするのか(ピクセル)*Tupleで渡す

self.image.set_colorkey((0,0,0))
= 画像の周囲にある無駄な外縁を消すためのfunction
ここでは周囲の黒を消す (0,0,0)

self.rect = self.image.get_rect()
= 新しく作った画像を格納した属性self.imageRectget_rect()functionを使って、別の属性self.rect属性に格納しておく。


次に、Playerクラスのインスタンスを作ろう

all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

all_sprites = pygame.sprite.Group()
= all_sprites変数にpygame.sprite.Group()を格納
Group()ではSpriteクラスのものをグループでまとめることができる。
これにより、全てのSpriteupdatefunctionを実行したりできるので便利。

player = Player()
= Player()インスタンスをplayerに格納する

all_sprites.add(player)
all_sprites変数に新しく作ったplayerインスタンスを入れる


ゲームループの中でPlayerクラスを描く

all_sprites.draw(screen)

= screenサーフェス(ゲーム画面)にall_spritesに含まれるSpritedraw()する

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0