눈이 내리다 | 파이게임에서 스프라이트 표시하기 | 로드 및 블리트

12242 단어 python
이해해야 할 게임을 만들기 시작하는 파이게임의 가장 중요한 개념 중 하나는 이미지를 로드하고 화면에 블리팅하는 것입니다.

blit stands for block image transfer, to me it feels a lot like layering
up layers/images in photoshop or Gimp.



이미지 로드



나는 64x64 픽셀 이미지를 열고 매우 부드러운 브러시로 중앙을 페인팅하여 Gimp에서 스포트라이트를 만드는 것으로 시작했습니다.



This is what it looks like



이제 이것을 파이게임에 로드할 수 있습니다.

import pygame img = pygame.image.load("assets/spotlight.png")


파이게임 색공간으로 변환



파이게임을 좀 더 효율적으로 만들기 위해 우리는 이미지를 다른 표면에 블릿할 때마다 이미지를 로드할 때마다 이미지를 파이게임 색공간으로 변환할 수 있습니다.

import pygame

# convert full opaque images
img = pygame.image.load("assets/spotlight.png").convert()

# convert pngs with transparancy
img = pygame.image.load("assets/spotlight.png").convert_alpha()


블리팅



이미지를 화면에 표시하려면 blit 메서드를 사용해야 합니다. blit 메서드에는 blit할 항목과 blit할 위치가 적어도 두 개의 인수가 필요합니다.

screen = pygame.display.set_mode(self.screen_size) screen.blit( img, (0, 0),)


note blitting to the position (0, 0) will align the top left corners of
the object we are blitting onto (screen) and the object we are blitting
(img).



기동기



이제 실제 게임을 실행해야 화면에 표시할 수 있습니다. 나는 내 자신의 시작/보일러 플레이트를 사용하고 있습니다. 따라하고 싶다면 github에서 자신의 가상 환경으로 설치할 수 있습니다.

pip install git+https://github.com/WaylonWalker/pygame-starter


https://waylonwalker.com/til/pygame-boilerplate-apr-2022/

You can read more about my starter in this post



이 이미지를 중간에 위치시키자



이제 스타터를 사용하여 새 게임을 만들고 약간의 오프셋만 있으면 스포트라이트를 중간에 직접 배치할 수 있습니다.

import pygame from pygame_starter import Game


class MyGame(Game):
    def __init__(self):
        super().__init__()
        # load in the image one time and store it inside the object instance
        self.img = pygame.image.load("assets/spotlight.png").convert_alpha()
    def game(self):
        # fill the screen with aqua
        self.screen.fill((128, 255, 255))
        # transfer the image to the middle of the screen
        self.screen.blit(
            self.img,
            (
                self.screen_size[0] / 2 - self.img.get_size()[0],
                self.screen_size[1] / 2 - self.img.get_size()[1],
            ),
        )


if __name__ == "__main__":
    game = MyGame()
    game.run()


이것을 load_and_blit.py로 저장하면 다음과 같이 명령에서 실행할 수 있습니다.

python load_and_blit.py


그리고 우리는 다음과 같은 결과를 얻어야 합니다.

the results of putting the image in the middle

투명 png로 변환



실수로 .convert() 대신 .convert_alpha()를 사용하면 어떻게 됩니까?



눈 만들기



내 스타터에 내장된 파이게임의 일반적인 개념은 일반적으로 매 프레임마다 화면을 재설정하기를 원한다는 것입니다. 화면에 스포트라이트를 비추는 새로운 개념을 바탕으로 여러 이미지를 화면에 블리팅하여 임의의 눈 노이즈를 만들 수 있습니다.

import random

import pygame from pygame_starter import Game


class MyGame(Game):

    def __init__(self):
        super().__init__()
        self.img = pygame.image.load("assets/spotlight.png").convert_alpha()

    def game(self):
        self.screen.fill((128, 255, 255))
        for  in range(100):
            self.screen.blit(
                self.img,
                (
                    random.randint(0, self.screen_size[0]) - self.img.get_size()[0],
                    random.randint(0, self.screen_size[1]) - self.img.get_size()[1],
                ),
            )


if __name__ == "__main__":
    game = MyGame()
    game.run()


결과




죄송합니다. 귀하의 브라우저는 포함된 동영상을 지원하지 않습니다.

좋은 웹페이지 즐겨찾기