python – 如何旋转一组pygame对象(rects或images)

一张图片胜过千言万语,所以最终,我的问题是“我怎么能实现这个目标?”:

直觉上,我认为这可以通过在pygame.display.set_mode定义的主显示对象中定义一个表面,绘制(或blitting)该表面上需要的任何内容,然后使用pygame.transform.rotate旋转它来实现.我假设静态点可以直接绘制到下面代码中的屏幕对象,这是pygame.display.set_mode函数返回的对象.

因此,我起草了以下测试代码,但我没有看到任何轮换.我究竟做错了什么?

#!/usr/bin/env python

import pygame as pg
from pygame.locals import *

SIZE = (800, 600)
BGCOL = (128, 128, 128)
STIMCOL = (80, 255, 80)

screen = pg.display.set_mode((SIZE), HWSURFACE | DOUBLEBUF)
screen.fill(BGCOL)

surf = pg.Surface((200, 200), flags=HWSURFACE)
surf.fill(BGCOL)

pg.draw.rect(surf, STIMCOL, (10, 20, 40, 50))
pg.draw.rect(surf, STIMCOL,  (60, 70, 80, 90))

screen.blit(surf, (100, 100))

pg.display.flip()

running = True
while running:
    pg.transform.rotate(surf, -1)
    pg.display.flip()

当然,如果有更好的方法,我会全力以赴.也许精灵团队是一个很好的方式去? (虽然我之前从未使用过它们… = /)

谢谢!

最佳答案 您在代码中有一些错误:

pygame.transform.rotate(surface,angle)返回一个旋转曲面

并且你不会在while循环中对表面进行blitting.所以你的代码应该是这样的:

import pygame as pg
from pygame.locals import *

SIZE = (800, 600)
BGCOL = (128, 128, 128)
STIMCOL = (80, 255, 80)

screen = pg.display.set_mode((SIZE), HWSURFACE | DOUBLEBUF)
screen.fill(BGCOL)

surf = pg.Surface((200, 200), flags=HWSURFACE)
surf.fill(BGCOL)

pg.draw.rect(surf, STIMCOL, (10, 20, 40, 50))
pg.draw.rect(surf, STIMCOL,  (60, 70, 80, 90))

screen.blit(surf, (100, 100))

pg.display.flip()

running = True
while running:
    surf = pg.transform.rotate(surf, -1) # updating rotation on the surface
    screen.blit(surf, (100, 100)) #bliting the resulting image every frame
    pg.display.flip()

编辑:在pygame文档中查看注释后,在旋转90度以外的任何内容时,调整图像大小会有很多问题.您应该跟踪旋转,并从头开始以增大的角度旋转图像.

点赞