在 pygame、Python 3 中通过旋转缩放保持透明像素

Keeping transparent pixels through rotozoom in pygame, Python 3

我目前正在 pygame、Python 3 中制作游戏,我遇到问题的部分代码是:

for counter in range(0, 30):
                particles = pygame.image.load('particles.png').convert()
                particles = pygame.transform.rotozoom(particles, 36*counter, 1.1**counter).convert()                
                particles.set_colorkey((0, 0, 0, 0))
                screen.blit(particles, particles.get_rect(centerx=480, centery=100))                
                pygame.display.flip()                
                time.sleep(0.05)

particles.png 只是透明背景上的几个彩色像素。问题是当图像被旋转和缩放时,其中一些粒子有点模糊,导致它们周围出现大量黑色方块。

如何解决这个问题?提前致谢!!

我对 pygame 的 rotozoom 结合透明度有不好的体验。不要加载图像然后旋转缩放它,请考虑以下事项:

  • 使用 PIL 库:

    1. 使用pygame.image.tostring
    2. 将加载表面转换为字符串
    3. 将字符串转换为图像对象
    4. 使用PIL的函数替换rotozoom(zooming, rotating)
    5. 使用相同的方法将图像对象转换回表面
  • 使用数学:

    1. 加载关于粒子位置和颜色的数据, 或从加载表面推断它
    2. 使用简单的数学函数来计算他们的新位置, 根据角度和缩放
    3. 使用 pygame.gfxdraw、pygame.draw 或 pygame.Surface.set_at
    4. 绘制它们

祝你好运!