簡體   English   中英

如何在pygame中旋轉圖片?

[英]how can I rotate my image in pygame?

我正在做一個簡單的太空游戲,希望我的船(xwingImg)自​​由移動。 按下a,d和s鍵時,我需要船旋轉。 我認為這會起作用:pg.transform.rotate(xwingImg,90),但似乎沒有任何變化。

import sys
import random
import pygame as pg


pg.init()
screen = pg.display.set_mode((1280, 800))
display_width = 1280
display_height= 800

black= (0,0,0)
white= (255,255,255)
red = (255,0,0)
blue_violet = (138,43,226)

xwingImg = pg.image.load('X-Wing.bmp').convert()
tieImg= pg.image.load('tiefighter.png').convert()
space=pg.image.load('space.jpg').convert()

BG_image = pg.image.load('space.jpg').convert()


def main():
    clock = pg.time.Clock()
    # Surfaces/images have a `get_rect` method which 
    # returns a rect with the dimensions of the image.
    player_rect = xwingImg.get_rect()
    player_rect.center = ( 640,400 )
    change_x = 0
    change_y = 0
    enemies = []
    spawn_counter = 30


    done = False

    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                done = True
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_d:
                    pg.transform.rotate(xwingImg, 90)
                    change_x = 5
                if event.key == pg.K_w:
                    change_y = -5
                if event.key == pg.K_s:
                    change_y= 5
                if event.key == pg.K_a:
                    change_x = -5
            if event.type == pg.KEYUP:
                if event.key == pg.K_d and change_x > 0:
                    change_x = 0
                if event.key == pg.K_a and change_x < 0:
                    change_x = 0
                if event.key == pg.K_w and change_y<0:
                    change_y=0
                if event.key == pg.K_s and change_y>0:
                    change_y=0



        # Spawn enemies if counter <= 0 then reset it.
        spawn_counter -= 1
        if spawn_counter <= 0:
            # Append an enemy rect. You can pass the position directly as an argument.
            enemies.append(tieImg.get_rect(topleft=(random.randrange(1280), -800 )))
            spawn_counter =  30


        # Update player_rect and enemies.
        player_rect.x += change_x
        player_rect.y += change_y
        for enemy_rect in enemies:
            enemy_rect.y += 5
            # Collision detection with pygame.Rect.colliderect.
            if player_rect.colliderect(enemy_rect):
                print('Collision!')

        # Draw everything.
        screen.blit(BG_image, (0,0))
        for enemy_rect in enemies:
            screen.blit(tieImg, enemy_rect)
        screen.blit(xwingImg, player_rect)

        if player_rect.x >display_width:
            player_rect.x = 0
        if player_rect.x < 0:
            player_rect.x= 1280
        if player_rect.y>display_height:
            player_rect.y = 0
        if player_rect.y < 0:
            player_rect.y= 800


        pg.display.flip()
        clock.tick(40)


if __name__ == '__main__':
    main()
    pg.quit()
    sys.exit()

pygame.transform.rotate()返回帶有旋轉對象的新Surface。 您沒有使用返回的Surface。 您不希望繼續重復旋轉圖像,因為旋轉需要填充返回的Surface以使其適合於rect。

旋轉(表面,角度)->表面

未過濾的逆時針旋轉。 angle參數表示度,可以是任何浮點值。 負角度量將順時針旋轉。

除非以90度為增量旋轉,否則圖像將被較大地填充以保留新的尺寸。 如果圖像具有像素Alpha,則填充區域將是透明的。 否則pygame將選擇與Surface colorkey或左上像素值匹配的顏色。

我只是跟蹤圖像應該旋轉的角度,然后在檢測到旋轉事件時更改該角度。 然后在你的牌步驟blit通過角度旋轉圖像。

player_image = pg.transform.rotate(xwingImg, angle)
player_rect = player_image.get_rect()
player_rect.center = player_pos
screen.blit(player_image, player_rect)

暫無
暫無

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

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