简体   繁体   English

Pygame.rotate 使表面增长而不是旋转

[英]Pygame .rotate is making a surface grow rather than rotate

I'm trying to make a program generate graphs and I'm trying to make the square rotate just for something later on, but the squares are growing rather than rotating even though I'm using pygame.transform.rotate().我正在尝试让程序生成图形,并且我正在尝试让正方形旋转只是为了稍后的事情,但是正方形正在增长而不是旋转,即使我正在使用 pygame.transform.rotate()。

import pygame, json
from pygame.locals import *

with open("data.json") as f:
    data = json.load(f)


running = True
pygame.init()
clock = pygame.time.Clock()
angle = 0
screen = pygame.display.set_mode(size=(800,600))
while running:
    screen.fill((0,0,0))
    clock.tick(30)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                running = False

    for i in range(0,len(data["x"])):
        surf = pygame.Surface((50,50))
        surf.fill((255,0,0))
        surfrect = surf.get_rect()
        surfrect.x = (data["x"][i])
        surfrect.y = (data["y"][i])
        surf = pygame.transform.rotate(surf,angle)
        screen.blit(surf,(surfrect))
    pygame.display.flip()
    angle += 1
    print(angle)
    if angle == 90:
        angle = 0 

pygame.quit()

And the data for anyone who wants to try it:以及任何想尝试的人的数据:

{"x":[100,200,300], "y":[100,200,300]}

You have to create a Surface with a per pixel alpha format (see How can I make an Image with a transparent Backround in Pygame? ):您必须创建一个具有每像素 alpha 格式的表面(请参阅如何在 Pygame 中制作具有透明背景的图像? ):

surf = pygame.Surface((50,50))

surf = pygame.Surface((50,50), pygame.SRCALPHA)

See also How do I rotate an image around its center using PyGame?另请参阅如何使用 PyGame 围绕其中心旋转图像?

import pygame, json
from pygame.locals import *

with open("data.json") as f:
    data = json.load(f)

running = True
pygame.init()
clock = pygame.time.Clock()
angle = 0
screen = pygame.display.set_mode(size=(800,600))

original_surf = pygame.Surface((50,50), pygame.SRCALPHA)
original_surf.fill((255,0,0))

while running:
    screen.fill((0,0,0))
    clock.tick(30)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                running = False

    for i in range(0,len(data["x"])):
        surf = pygame.transform.rotate(original_surf, angle)
        surfrect = surf.get_rect()
        surfrect.centerx = (data["x"][i])
        surfrect.centery = (data["y"][i])
        screen.blit(surf,(surfrect))
    pygame.display.flip()
    angle += 1
    print(angle)
    if angle == 90:
        angle = 0 

pygame.quit()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM