4

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

在此处输入图像描述

直观地说,我认为这可以通过在由 定义的主显示对象内定义一个表面,在该表面上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()

当然,如果有更好的方法可以做到这一点,我会全力以赴。也许精灵组是一个好方法?(虽然我以前从未使用过它们... =/)

谢谢!

4

1 回答 1

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 度以外的任何东西时,调整图像大小会出现很多问题。您应该跟踪旋转,并从头开始将图像旋转一个增加的角度。

于 2012-12-05T19:34:55.167 回答