亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使這個 pygame 精靈的旋轉(以中心為中心)起作用?

如何使這個 pygame 精靈的旋轉(以中心為中心)起作用?

慕工程0101907 2021-06-15 17:18:44
我很難使用 pygame 創建單個精靈旋轉。我正在按照此代碼(https://stackoverflow.com/a/47688650/5074998)獲取精靈的中心旋轉。這是我當前的代碼:import pygameFPS: int = 100W = 600H = 400MAGENTA = (255, 0, 255)BLACK = (0, 0, 0)pygame.init()screen = pygame.display.set_mode([W, H])pygame.display.set_caption("Cars")clock = pygame.time.Clock()class sp():    def __init__(self):        self.image = pygame.Surface((122, 70), pygame.SRCALPHA)        pygame.draw.polygon(self.image, pygame.Color('dodgerblue1'),                            ((1, 0), (120, 35), (1, 70)))        self.orig_image = self.image        self.rect = self.image.get_rect(center=[W / 2, H / 2])        self.angle = 0    def update(self):        self.angle += 2        self.rotate()        screen.blit(self.image, [100, 100])    def rotate(self):        self.image = pygame.transform.rotozoom(self.orig_image, self.angle, 1)        self.rect = self.image.get_rect(center=self.rect.center)sp1 = sp()out = pause = Falsewhile not out:    clock.tick(FPS)    for event in pygame.event.get():        if event.type == pygame.QUIT or event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:            out = True        if event.type == pygame.KEYDOWN:            if event.key == pygame.K_SPACE:                pause = not pause    if not pause:        screen.fill(BLACK)        sp1.update()        pygame.display.flip()但我不明白為什么我會得到這個:
查看完整描述

1 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

發生這種情況是因為您self.image在位置[100, 100]而不是self.rect(這意味著在self.rect.topleft坐標處)進行blitting 。每次旋轉后圖像的大小都不同,如果您只是在相同的左上角坐標處對其進行 blit,則圖像會像這樣擺動,因為每一幀的中心都在其他地方。您可以通過在[100, 100]以下位置繪制邊界矩形來看到:

pygame.draw.rect(screen, (255, 0, 0), [(100, 100), self.image.get_size()], 1)

為了解決這個問題,你必須每次都創建一個新的矩形并將其center坐標設置center為前一個矩形的坐標。這也將調整topleft坐標(圖像被 blit 的位置),以便圖像保持居中。然后在 rect 處 blit 圖像:

screen.blit(self.image, self.rect)

繪制self.rect以查看topleft坐標如何一直變化而中心不會移動:

pygame.draw.rect(screen, (255, 0, 0), self.rect, 1)


查看完整回答
反對 回復 2021-06-22
  • 1 回答
  • 0 關注
  • 497 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號