スプライトというのは、背景画像以外の動く画像などを指すということは前回説明しました。
今回は、背景画像と主人公画像を表示して、主人公のほうを動かしてみます。
スポンサーリンク
まずは背景画像を表示させる
ソースコード
#-*- coding utf-8 -*-
import pygame
from pygame.locals import*
import sys
(h,w)=(480,680)
pygame.init()
screen=pygame.display.set_mode((w,h))
pygame.display.set_caption("背景画像の出力")
BackgroundImg=pygame.image.load("b.jpg").convert()
while(1):
screen.blit(BackgroundImg,(0,0))
pygame.display.update()
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
これは普通に、前回までの知識で作成することができますが、スプライトを使用するには「クラス」の考え方が必要となりかなり難しいです。
スプライトを使い主人公を作成する
ソースコード
#-*- coding utf-8 -*-
import pygame
from pygame.locals import*
import sys
(h,w)=(480,680)
class Sprite1(pygame.sprite.Sprite): #pygame.sprite.Spriteはスプライトクラス
def __init__(self,filename,x,y): #Sprite1を呼び出したときに最初呼び出されるメゾット
pygame.sprite.Sprite.__init__(self)
self.image=pygame.image.load(filename).convert_alpha() #画像情報をself.imageとする
width=self.image.get_width() #画像の横幅
height=self.image.get_height()
self.rect=Rect(x,y,width,height) #x,yは座標
def draw(self,screen): #描写するメゾット
screen.blit(self.image,self.rect)
def main(): #main関数
pygame.init()
screen=pygame.display.set_mode((w,h))
pygame.display.set_caption("スプライトの生成")
BackgroundImg=pygame.image.load("b.jpg").convert()
SyuzinkoImg=Sprite1("a.jpg",0,0) #スプライトの作成
while(1):
screen.blit(BackgroundImg,(0,0))
SyuzinkoImg.draw(screen) #スプライトの描写
pygame.display.update()
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if __name__ == "__main__": #main関数を呼び出し
main()
シンプルに画像を設置するだけですが、かなり難しい文です。
class Sprite1(pygame.sprite.Sprite): #pygame.sprite.Spriteはスプライトクラス
def __init__(self,filename,x,y): #Sprite1を呼び出したときに最初呼び出されるメゾット
pygame.sprite.Sprite.__init__(self) #Spriteを継承させる
self.image=pygame.image.load(filename).convert_alpha() #画像情報をself.imageとする
width=self.image.get_width() #画像の横幅
height=self.image.get_height()
self.rect=Rect(x,y,width,height) #x,yは座標
def draw(self,screen): #描写するメゾット
screen.blit(self.image,self.rect)
これがクラスです。
SyuzinkoImg=Sprite1("a.jpg",0,0) #スプライトの作成
SyuzinkoImg.draw(screen) #スプライトの描写
これで、スプライトクラスを呼び出します。
drawメゾットに動きを加えるとこうなります。
#-*- coding utf-8 -*-
import pygame
from pygame.locals import*
import sys
(h,w)=(480,680)
class Sprite1(pygame.sprite.Sprite): #pygame.sprite.Spriteはスプライトクラス
def __init__(self,filename): #Sprite1を呼び出したときに最初呼び出されるメゾット
pygame.sprite.Sprite.__init__(self)
self.image=pygame.image.load(filename).convert_alpha() #画像情報をself.imageとする
width=self.image.get_width() #画像の横幅
height=self.image.get_height()
self.rect=self.image.get_rect() #x,yは座標
def draw(self,screen): #描写するメゾット
pressed_keys=pygame.key.get_pressed()
if pressed_keys[K_LEFT]:
self.rect.move_ip(-1,0)
if pressed_keys[K_RIGHT]:
self.rect.move_ip(1,0)
if pressed_keys[K_UP]:
self.rect.move_ip(0,-1)
if pressed_keys[K_DOWN]:
self.rect.move_ip(0,1)
self.rect=self.rect.clamp(Rect(0,0,w,h)) #画面外に行かないようにするため
screen.blit(self.image,self.rect)
def main(): #main関数
pygame.init()
screen=pygame.display.set_mode((w,h))
pygame.display.set_caption("スプライトの生成")
BackgroundImg=pygame.image.load("b.jpg").convert()
SyuzinkoImg=Sprite1("a.jpg") #スプライトの作成
while(1):
screen.blit(BackgroundImg,(0,0))
SyuzinkoImg.draw(screen) #スプライトの描写
pygame.display.update()
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if __name__ == "__main__": #main関数を呼び出し
main()
これで動かすことができるようになりました。
まとめ
クラスの概念はかなりめんどくさかったです。
しかし、使えるようになるとプログラミングが効率よく正確にできるようになるので、覚えるのは必須でしょう。
pythonだけでなくjavaなどでもクラスの考え方を使うので、かなり幅広く役にたちます。