一张图片胜过千言万语,所以最终,我的问题是“我怎样才能做到这一点?”:
直觉上,我认为这可以通过在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()
当然,如果有更好的方法,我会全力以赴。也许精灵团队是一个很好的方式去? (虽然我以前从未使用过它们... = /)
谢谢!
答案 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度以外的任何内容时,调整图像大小会有很多问题。您应该跟踪旋转,并从头开始旋转图像。