강의노트 이미지
강의노트
• 조회수 364
• 댓글 0
• 수정 1주 전
- 이미지
이미지 모듈 함수
파이게임에서 이미지를 로딩은 pygame.image 모듈이 있다.
함수 | 설명 | 함수 | 설명 | |
---|---|---|---|---|
pygame.image.load | 이미지 로드 | pygame.image.save | 이미지 저장 | |
pygame.image.get_extended | 이미지 형식을 로드 | pygame.image.tostring | 이미지를 문자열 버퍼로 전송 | |
pygame.image.fromstring | 문자열 버퍼로부터 새 표면 생성 | pygame.image.frombuffer |
이미지 로딩
특정한 이미지를 로딩은:
image_surf = pygame.image.load("myimage.bmp").convert()
player = pygame.image.load('player.bmp').convert()
background = pygame.image.load('liquid.bmp').convert()
로드 함수는 파일 이름만 가져와 로드된 이미지가 있는 새 Surface를 반환한다.
로드한 후 Surface 메서드인 convert()를 호출한다. Convert는 이미지를 디스플레이와 동일한 픽셀 형식으로 변환된다. 이미지는 화면에서 동일한 형식이 되므로 매우 빠르게 blit된다. 변환하지 않으면 blit() 함수가 더 느려진다.
이미지 읽고 표현하기
screen = pygame.display.set_mode(스크린크기)
p_img = pygame.image.load(이미지이름) #1
p_img = pygame.transform.scale(p_img, 새로운 크기) #2
while True:
screen.blit(p_img,위치) #3
pygame.display.update()
pygame.quit()
- 1 : 이미지를 로드한다. 이미지이름에는 위치도 포함된다.
- 2 : 이미지의 크기를 원하는 크기로 조정한다.
- 3 : blit함수는 그림을 위치에 그려준다.
이미지 움직이기
화면에서 10개의 다른 이미지가 움직이기를 원한다고 가정해 보겠습니다. 이를 처리하는 좋은 방법은 파이썬 클래스를 사용하는 것이다.
게임 객체를 나타내는 클래스를 만든다. 이 객체는 자체를 이동하는 함수를 갖는다. 객체를 그리거나 이동하는 함수는 한 번에 한 프레임(또는 한 단계)만 이동하는 방식으로 작동해야 한다.
클래스를 만드는 파이썬 코드는 다음과 같습니다.
class GameObject:
def __init__(self, image, height, speed):
self.speed = speed
self.image = image
self.pos = image.get_rect().move(0, height)
def move(self):
self.pos = self.pos.move(self.speed, 0)
if self.pos.right > 600:
self.pos.left = 0
그래서 우리 클래스에는 두 가지 함수가 있습니다. init 함수는 객체를 구성합니다. 객체를 배치하고 속도를 설정합니다. move 메서드는 객체를 한 단계 이동합니다. 너무 멀리 이동하면 객체를 왼쪽으로 다시 이동합니다.
예제
# pg_init07.py
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((500,400))
clock = pygame.time.Clock()
p_img = pygame.image.load('tiger.bmp')
#p_img = pygame.transform.scale(p_img, (100,100))
white = (255,255,255)
black = (0,0,0)
x = 0
y = 0
vel = 5
running = True
left_key, right_key, up_key, down_key = False, False, False, False
while running:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN: #1
if event.key == pygame.K_LEFT:
left_key = True
if event.key == pygame.K_RIGHT:
right_key = True
if event.key == pygame.K_UP:
up_key = True
if event.key == pygame.K_DOWN:
down_key = True
if event.type == pygame.KEYUP: #2
if event.key == pygame.K_LEFT:
left_key = False
if event.key == pygame.K_RIGHT:
right_key = False
if event.key == pygame.K_UP:
up_key = False
if event.key == pygame.K_DOWN:
down_key = False
if left_key:
x = x - vel
if right_key:
x = x + vel
if up_key:
y = y - vel
if down_key:
y = y + vel
screen.fill(white)
screen.blit(p_img, (x,y)) #3
pygame.display.update()
pygame.quit()
- 키가 눌려있는 동안 vel의 픽셀 만큼 움직인다.
- 키가 떨어지면 움직임이 없어진다.
- 이미지의 위치(x,y)에 그림을 그려진다.
배경화면 만들기
- 배경화면은 이미지를 읽어 들여 창의 크기와 같게 만들면 배경화면이 된다.
import pygame
screen = pygame.display.set_mode((500,400))
bg = pygame.image.load("배경이미지.jpg")
bg = pygame.transform.scale(bg, ('사이즈')) #배경 이미지를 창의 크기에 맞게 스케일을 바꿔준다.
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(white)
screen.blit(bg, (0,0))
pygame.quit()
첫 글입니다.
마지막 글입니다.
로그인 하면 댓글을 쓸 수 있습니다.