강의노트 파이게임 창
강의노트
• 조회수 374
• 댓글 0
• 수정 2주 전
- 파이게임
스크린에 그리기
좌표계
좌표계에서 x축은 직교 좌표계와 같지만 y축은 상단이 0이고 다음 그림과 같이 화면 아래로 내려오면 y축은 증가한다.
Surface의 왼쪽 위 모서리는 좌표 (0, 0)입니다. 오른쪽으로 조금 이동하면 (10, 0)이 되고, 그다음 똑같이 아래로 이동하면 (10, 10)이 됩니다. 블리팅할 때 위치 인수는 소스의 왼쪽 위 모서리가 대상에 배치되어야 하는 위치를 나타냅니다.
좌표에 대한 편리한 컨테이너인 Rect가 있습니다. Rect는 기본적으로 이러한 좌표의 직사각형 영역을 나타냅니다. 왼쪽 위 모서리와 크기가 있습니다. Rect에는 이동 및 배치에 도움이 되는 많은 편리한 메서드가 있습니다.
이미지
파이게임에서 이미지는 Surface에 저장된다. 디스플레이 또한, 이미지로 취급된다. 이것이 스크린 매니지먼트를 쉽게한다.
스크린에 무엇을 그리기위해서는 첫 번째로 파일에서 이미지를 읽어온다. surface
Blitting은 한 이미지를 다른 이미지에 나타내는 것으로 프레임마다 조금씩 다른 위치에 배치하여 움직이는 착시현상을 준다.
파이게임에서 창의 크기가 (500,400)이고 pygame.display.set_mode()를 호출하면 왼쪽 위는 (0,0), 오른쪽 위는 (500,0), 왼쪽 아래는 (400,0), 오른쪽 아래는 (500,400)이다.
창크기 조절
import pygame
SCREEN_SIZE = (640. 480)
screen = pygame.display.set_mode(SCREEN_SIZE, pygame.RESIZABLE)
pygame.display.set_caption(’창 크기 조절하기 ∼ !’)
screen.fill((0, 0, 255))
pygame.display.flip()
running = True
while running:
for event in pygame.event.get( ):
if event.type== pygame.QUIT:
running = False
if event.type == pygame.VIDEORESIZE:
SCREEN_SIZE_AFTER= event.size
screen = pygame.display.set_mode(SCREEN_SIZE_AFTER, pygame.RESIZABLE)
pygame.display.set_caption('창 크기 : ' + str(SCREEN_SIZE) + ' =>' +str(SCREEN_SIZE_AFTER))
screen.fill((0, 0, 255))
pygame.display.update()
pygame.quit()
No frame
import pygame
SCREEN_SIZE = (640, 480)
screen = pygame.display.set_mode(SCREEN_SIZE, pygame.NOFRAME)
pygame.display.set_caption('No Frame ∼ !’)
screen.fill((0, 0, 255))
pygame.display.flip()
empty surface
import pygame
pygame.init( )
screen_width = 640
screen_height = 480
WHITE= (255, 255, 255)
BLACK= (0, 0, 0)
screen = pygame.display.set_mode( (screen_width, screen_height))
running = True
while running:
for event in pygame.event.get( ):
if event.type == pygame.QUIT:
running = False
blankSurface = pygame.Surface((int(screen_width*0.8), int(screen_height*0.8)))
blankSurface.fill(WHITE)
screen.blit(blankSurface, (int(screen_width*0.1), int(screen_height*0.1)))
pygame.display.update()
pygame.quit( )
Subsurface
import pygame
from pygame.locals import*
SCREEN_WIDTH = 600
SCREEN_HEIGHT= 400
pygame_init( )
screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
pygame.display.set_caption('Subsurface_Test’)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
red_rect = pygame.Rect(50,50,200, 150)
blue_rect = pygame.Rect(150, 150, 200, 150)
red_surface = screen.subsurface(red_rect)
blue_surface = screen.subsurface(blue_rect)
red_surface.fill((255 , 0, 0))
blue_surface.fill((0, 255, 0))
red_surface = red_surface.copy( )
blue_surface = blue_surface.copy( )
screen.blit(red_surface, red_rect)
screen.blit(blue_surface, blue_rect)
pygame.display.update( )
pygame.quit( )
import pygame
from pygame.locals import*
SCREEN_WIDTH = 600
SCREEN_HEIGHT= 400
pygame_init( )
screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
pygame.display.set_caption('Subsurface_Test’)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
red_rect = pygame.Rect(50,50,400, 300)
blue_rect = pygame.Rect(50, 50, 100, 100)
red_surface = screen.subsurface(red_rect)
blue_surface = red_surface.subsurface(blue_rect)
red_surface.fill((255 , 0, 0))
blue_surface.fill((0, 255, 0))
red_surface = red_surface.copy( )
blue_surface = blue_surface.copy( )
screen.blit(red_surface, red_rect)
screen.blit(red_surface, blue_rect)
pygame.display.update( )
pygame.quit( )
화면 업데이트
pygame.display.flip() -> 모든 화면을 업데이트한다.
pygame.display.update() -> 전달되는 인수가 없으면 전체 화면이 업데이트된다.
인수가 전달되면 전달된 인수만 업데이트 된다.
무언가를 부드럽게 움직이는 것처럼 보이게 하려면 한 번에 몇 픽셀씩만 움직이면 됩니다.
로그인 하면 댓글을 쓸 수 있습니다.