我只是想知道,如何使旋转的 2d 精灵的边缘平滑?以在线游戏 lordz.io 为例。即使您旋转,播放器的边缘也完全没有问题。 使用 pygame 中的 .png 资源(或者一般来说,使用任何其他工具)可以实现类似的效果吗?
到处找,没有找到好的解决办法。我知道 3d 游戏中有抗锯齿功能,但我不知道 png 资源是否可以实现这样的功能。
尝试这样的事情:)我第一次并没有完全明白确切的问题;)
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”或更改代码中的位置。然后启动代码,您应该能够使用左右箭头键旋转图像。
虽然我从未尝试过。也许尝试使用 smoothscale 函数:pygame.transform.smoothscale()。 (您可以在 pygame 文档中找到更多详细信息)。如果将精灵缩放为 1:1。它可能会达到您想要的结果。