簡體   English   中英

如何翻轉加載的圖像精靈? Pygame

[英]How can I flip loaded image sprites? Pygame

我想翻轉這些精靈,使它們朝左。 這樣,當我按下 K_LEFT 時,我可以將精靈圖像用於向左運行的玩家。 目前有它,如果你按下右箭頭,你的玩家會向右移動並動畫。

            self.sprites = []
            self.sprites.append(py.image.load('I1.png'))
            self.sprites.append(py.image.load('R0.png'))
            self.sprites.append(py.image.load('R1.png'))
            self.sprites.append(py.image.load('R2.png'))
            self.sprites.append(py.image.load('R3.png'))
            self.sprites.append(py.image.load('R4.png'))
            self.sprites.append(py.image.load('R5.png'))
            self.current_sprite = 0
            self.image = self.sprites[self.current_sprite]
            self.rect = self.image.get_rect()
            self.rect.center = (x, y)
            self.hit_rect = PLAYER_RECT_HIT
            self.hit_rect.center = self.rect.center
            self.pos = vec(x, y)
            self.vel = vec(0, 0)
            self.acc = vec(0, 0)
            self.is_animating = False

def get_keys(self):
    self.acc = vec(0, PLAYER_GRAVITY)
    keys = py.key.get_pressed()
    if keys[py.K_RIGHT]:
        self.acc.x += PLAYER_ACC
        self.animate()
    if keys[py.K_LEFT]:
        self.acc.x -= PLAYER_ACC

def animate(self):
    self.is_animating = True

def update(self):
    self.get_keys()

    if self.is_animating:
        self.current_sprite += 0.2
        if self.current_sprite >= len(self.sprites):
            self.current_sprite = 0
            self.is_animating = False
    self.image = self.sprites[int(self.current_sprite)]

    self.pos += self.vel
    self.hit_rect.centerx = self.pos.x
    wall_collision(self, self.game.walls, 'x')
    self.hit_rect.centery = self.pos.y
    wall_collision(self, self.game.walls, 'y')
    self.rect.center = self.hit_rect.center

    # Apply Friction
    self.acc.x += self.vel.x * PLAYER_FRICTION
    # Equation of motion
    self.vel += self.acc
    self.pos += self.vel + 0.5 * self.acc

我會嘗試 pygame.transform.flip()

https://www.pygame.org/docs/ref/transform.html#pygame.transform.flip

當您快速進入屏幕時,您可以檢查是否按下了“左鍵”和 transform.flip

'翻轉(表面,xbool,ybool)->表面'

例如。

if key == 'left':
    self.screen.blit(pygame.transform.flip(self.image, False, True), self.rect)

示例代碼:

import pygame
import pygame.sprite
import sys


class WalkingSprite(pygame.sprite.Sprite):
    """ A class to manage an animated sprite. """

    def __init__(self):
        super(WalkingSprite, self).__init__()
        self.direction = True

        self.images = []
        for number in range(1, 11):
            self.images.append(pygame.image.load(f'images/walking_sprite{number}.png'))

        self.index = 0
        self.image = self.images[self.index]
        self.rect = self.image.get_rect()
        self.rect.x, self.rect.y = 300, 200

    def update(self):
        self.index += 1
        if self.index >= len(self.images):
            self.index = 0

        if self.direction:
            self.image = self.images[self.index]
        else:
            self.image = pygame.transform.flip(self.images[self.index], True, False)


BG_COLOR = pygame.Color('white')
pygame.init()
screen = pygame.display.set_mode((800, 600))
walking_sprite = WalkingSprite()
sprite_group = pygame.sprite.Group(walking_sprite)

clock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_LEFT:
                walking_sprite.direction = False

            if event.key == pygame.K_RIGHT:
                walking_sprite.direction = True

        if event.type == pygame.QUIT:
            sys.exit()

    sprite_group.update()
    screen.fill(BG_COLOR)
    sprite_group.draw(screen)
    pygame.display.update()
    clock.tick(15)

Transform.rotate 是您正在尋找的。

 for sprite in self.sprites :
     pygame.transform.rotate (sprite, angle)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM