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

时间:2012-12-05 16:08:48

标签: python pygame

一张图片胜过千言万语,所以最终,我的问题是“我怎样才能做到这一点?”:

enter image description here

直觉上,我认为这可以通过在pygame.display.set_mode定义的主显示对象中定义一个表面,绘制(或blitting)该表面上需要的任何内容,然后用pygame.transform.rotate旋转它来实现。 。我猜想,静态点可以直接绘制到下面代码中的screen对象,这是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()

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

谢谢!

1 个答案:

答案 0 :(得分:2)

代码中有一些错误:

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度以外的任何内容时,调整图像大小会有很多问题。您应该跟踪旋转,并从头开始旋转图像。