Pygame 2d 游戏精灵旋转锯齿状边缘

问题描述 投票:0回答:2

我只是想知道,如何使旋转的 2d 精灵的边缘平滑?以在线游戏 lordz.io 为例。即使您旋转,播放器的边缘也完全没有问题。 使用 pygame 中的 .png 资源(或者一般来说,使用任何其他工具)可以实现类似的效果吗?

到处找,没有找到好的解决办法。我知道 3d 游戏中有抗锯齿功能,但我不知道 png 资源是否可以实现这样的功能。

pygame 2d antialiasing image-rotation
2个回答
0
投票

尝试这样的事情:)我第一次并没有完全明白确切的问题;)


import pygame
from pygame.locals import *                  

image = pygame.image.load("/home/pi/Desktop/image.png") #Image location

#PYGAME_INITIALISATION
pygame.init()

#SCREEN_AND_TEXT_PARAMETERS
screen = pygame.display.set_mode( ( 350, 425 ) )

def blitRotate(surf, image, pos, originPos, angle):

    #offset from pivot to center
    image_rect = image.get_rect(topleft = (pos[0] - originPos[0], pos[1]-originPos[1]))
    offset_center_to_pivot = pygame.math.Vector2(pos) - image_rect.center

    #roatated offset from pivot to center
    rotated_offset = offset_center_to_pivot.rotate(-angle)

    #roatetd image center
    rotated_image_center = (pos[0] - rotated_offset.x, pos[1] - rotated_offset.y)

    #get a rotated image
    rotated_image = pygame.transform.rotate(image, angle)
    rotated_image_rect = rotated_image.get_rect(center = rotated_image_center)

    #rotate and blit the image
    surf.blit(rotated_image, rotated_image_rect)

def rotate():
    w, h = image.get_size()
    pos = (175, 200) #X and Y-Position
    blitRotate(screen, image, pos, (w/2, h/2), angle) # blit rotated image
    pygame.display.flip() # update entire display

angle = 0 # starting angle

while True:
    for event in pygame.event.get() :
        #Check for pygame event
        if event.type == KEYDOWN:
            if event.key == K_LEFT: # arrow-key left
                angle -=10 #decrease angle
                rotate() #call funktion rotate()
                
            elif event.key == K_RIGHT: # arrow-key right
                angle +=10 # increase angle
                rotate() #call funktion rotate()
                
        elif event.type == pygame.QUIT :
            sys.exit()

您现在需要做的就是复制代码并将图像保存在桌面上并命名为“image.png”或更改代码中的位置。然后启动代码,您应该能够使用左右箭头键旋转图像。


-1
投票

虽然我从未尝试过。也许尝试使用 smoothscale 函数:pygame.transform.smoothscale()。 (您可以在 pygame 文档中找到更多详细信息)。如果将精灵缩放为 1:1。它可能会达到您想要的结果。

© www.soinside.com 2019 - 2024. All rights reserved.