簡體   English   中英

如何使用 Pygame 繪制旋轉橢圓?

[英]How to draw a rotated ellipse using Pygame?

這里給出了我用來在其中繪制一個矩形和一個橢圓的代碼。(紫色)。

pygame.draw.rect(screen, BLACK, [50, 50, 500, 200], 2)
pygame.draw.ellipse(screen, BLACK, [50, 50, 500, 200], 2)

我需要像我的綠色圖像一樣繪制一個旋轉的橢圓。 有沒有我可以在 pygame 中使用的代碼?

謝謝你。

不幸的是,沒有直接的方法來繪制旋轉的形狀。 pygame.transform.rotate()可以旋轉pygame.Surface object 但不能直接旋轉形狀。 您需要在Surface上繪制形狀並旋轉該Surface

  1. 使用每像素 alpha 格式和形狀大小創建pygame.Surface object。
  2. 在 _Surface 上繪制形狀。
  3. 以形狀圍繞其中心旋轉Surface 請參閱如何使用 PyGame 圍繞其中心旋轉圖像?
  4. 將帶有形狀的blit粘貼到目標 Surface

編寫一個繪制旋轉形狀的函數:

def draw_rect_angle(surface, color, rect, angle, width=0):
    target_rect = pygame.Rect(rect)
    shape_surf = pygame.Surface(target_rect.size, pygame.SRCALPHA)
    pygame.draw.rect(shape_surf, color, (0, 0, *target_rect.size), width)
    rotated_surf = pygame.transform.rotate(shape_surf, angle)
    surface.blit(rotated_surf, rotated_surf.get_rect(center = target_rect.center))
def draw_ellipse_angle(surface, color, rect, angle, width=0):
    target_rect = pygame.Rect(rect)
    shape_surf = pygame.Surface(target_rect.size, pygame.SRCALPHA)
    pygame.draw.ellipse(shape_surf, color, (0, 0, *target_rect.size), width)
    rotated_surf = pygame.transform.rotate(shape_surf, angle)
    surface.blit(rotated_surf, rotated_surf.get_rect(center = target_rect.center))

使用以下功能:

angle = 30
draw_rect_angle(screen, BLACK, [50, 50, 500, 200], angle, 2)
draw_ellipse_angle(screen, BLACK, [50, 50, 500, 200], angle, 2)

最小的例子:

import pygame
import test

pygame.init()
window = pygame.display.set_mode((400, 400))
clock = pygame.time.Clock()

def draw_rect_angle(surface, color, rect, angle, width=0):
    target_rect = pygame.Rect(rect)
    shape_surf = pygame.Surface(target_rect.size, pygame.SRCALPHA)
    pygame.draw.rect(shape_surf, color, (0, 0, *target_rect.size), width)
    rotated_surf = pygame.transform.rotate(shape_surf, angle)
    surface.blit(rotated_surf, rotated_surf.get_rect(center = target_rect.center))

def draw_ellipse_angle(surface, color, rect, angle, width=0):
    target_rect = pygame.Rect(rect)
    shape_surf = pygame.Surface(target_rect.size, pygame.SRCALPHA)
    pygame.draw.ellipse(shape_surf, color, (0, 0, *target_rect.size), width)
    rotated_surf = pygame.transform.rotate(shape_surf, angle)
    surface.blit(rotated_surf, rotated_surf.get_rect(center = target_rect.center))

angle = 00
run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    window_center = window.get_rect().center

    window.fill((255, 255, 255))
    draw_rect_angle(window, (0, 0, 0), (75, 150, 250, 100), angle, 2)
    draw_ellipse_angle(window, (0, 0, 0), (75, 150, 250, 100), angle, 2)
    angle += 1
    pygame.display.flip()

pygame.quit()
exit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM