Sök…


rita former, text och bilder på skärmen med en liten animering

Detta program kommer att rita några former på skärmen, rita "hej värld!" mitt på skärmen och låt en bild gå till varje fönsterhörn. Du kan använda varje bild du vill, men du måste placera bildfilen i samma katalog som ditt program.

hela koden:

import pygame, sys
from pygame.locals import *

pygame.init()

FPS = 30 #frames per second setting
fpsClock = pygame.time.Clock()

#set up the window
screen = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('animation')

#set up the colors
white = (255, 255, 255)
black = (  0,   0,   0)
green = (0, 255, 0)
blue = (0, 0, 180)
red   = (255,   0,   0)

image  = pygame.image.load('image.png')
imagex = 360
imagey = 260
direction = 'left'

# text setting
font_obj = pygame.font.Font('freesansbold.ttf', 32)
text_surface_obj = font_obj.render('Hello World!', True, GREEN, BLUE)
text_rect_obj = text_surface_obj.get_rect()
text_rectObj.center = (200, 150)

while True: # the main game loop
    screen.fill(WHITE)

    # draw a green polygon onto the surface
    pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))

    # draw some blue lines onto the surface
    pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
    pygame.draw.line(screen, blue, (120, 60), (60, 120))
    pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)

    # draw a blue circle onto the surface
    pygame.draw.circle(screen, blue, (300, 50), 20, 0)

    # draw a red ellipse onto the surface
    pygame.draw.ellipse(screen, red, (100, 150, 40,80), 1)

    # draw a red rectangle onto the surface
    pygame.draw.rect(screen,red, (200, 150, 100, 50))

    # draw the text onto the surface
    screen.blit(text_surface_obj, text_rect_obj)


    #the animation of the image
    if direction == 'right':
        imagex += 5
        if imagex == 360:
            direction = 'down'
    elif direction == 'down':
        imagey += 5
        if imagey == 260:
            direction = 'left'
    elif direction == 'left':
        imagex -= 5
        if imagex == 20:
            direction = 'up'
    elif direction == 'up':
        imagey -= 5
        if imagey == 20:
            direction = 'right'
    screen.blit(image, (imagex, imagey))

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    pygame.display.update()
    fpsClock.tick(FPS)

rita den vita bakgrunden:

screen.fill(white)

rita polygonen:

I den här funktionen definierar du skärmytan, färgen och positionen för varje hörn i polygonen, du kan göra det medsols och moturs.

pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))

rita linjerna:

Här definierar du skärmytan, färgen, den första och den sista punkten och bredden på linjen.

pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
pygame.draw.line(screen, blue, (120, 60), (60, 120))
pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)

rita cirkeln:

I den här funktionen definierar du visningsytan, färgen, positionen, radien och cirkelns bredd (0 ger en enkel cirkel).

pygame.draw.circle(screen, blue, (300, 50), 20, 0)

rita ellipsen:

I den här funktionen definierar du skärmytan, färgen, positionen, den horisontella storleken, den vertikala storleken och ellipsens bredd

pygame.draw.ellipse(screen, red, (100, 150, 40,80), 1)

rita rektangeln:

I den här funktionen definierar du skärmytan, färgen, positionen och vertikalen och rektangelns horisontella storlek.

pygame.draw.rect(screen,red, (200, 150, 100, 50))

definiera texten:

Först definierar du typen och storleken på din text, jag använder ett grundläggande teckensnitt som du får med pygame.

font_obj = pygame.font.Font('freesansbold.ttf', 32)

Sedan definierar du den faktiska texten, om du vill ha den fet eller inte (sann / falsk), textens färg och, om du vill markera din text, en färg på markeringen.

text_surface_obj = font_obj.render('Hello World!', True, green, blue)

Om du vill markera din text eller vill definiera mitt i din text måste du berätta för pygame med den här funktionen:

text_rect_obj = text_surface_obj.get_rect()

Och efter det kan du definiera mitt i texten med den här funktionen:

text_rect_obj.center = (200, 150)

rita texten:

Om du markerade din text eller definierade mitten måste du rita texten på detta sätt:

screen.blit(text_surface_obj, text_rectObj)

Annars ritar du din text, men du måste definiera positionen, så gör du så här:

DISPLAYSURF.blit(textSurfaceObj, (100,50))

definiera bilden:

Här definierar du den bild du vill använda, startpositionen (x- och y-koordinaterna) och bildens riktning.

image  = pygame.image.load('image.png')
imagex = 360
imagey = 260
direction = 'left'

animera bilden:

Här kontrollerar du bildens riktning, om den nådde ett hörn, ändra riktningen, om inte, flytta den 5 pixlar i samma riktning och rita bilden igen. Det är vad vi gör med den här delen av koden:

if direction == 'right':
    imagex += 5
    if imagex == 360:
        direction = 'down'
elif direction == 'down':
    imagey += 5
    if imagey == 260:
        direction = 'left'
elif direction == 'left':
    imagex -= 5
    if imagex == 20:
        direction = 'up'
elif direction == 'up':
    imagey -= 5
    if imagey == 20:
        direction = 'right'
screen.blit(image, (imagex, imagey))

Obs: min bild är 20 till 20 pixlar, jag använde if imagex == 360 och if imagey == 260: för då är min bild 20 pixlar från kanten, om din bild har en annan storlek måste du ändra siffrorna .

kontrollera om du slutar programmet:

Här kontrollerar vi om du stängde fönstret på ditt program.

for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
        sys.exit()

uppdatering av skärmen:

Här berättar du för pygame att uppdatera skärmen så att allt du har ritat visas på skärmen.

pygame.display.update()

definiera ramarna per sekund:

Här berättar du pygame att sova tillräckligt så att ramarna per sekund inställning respekteras.

fpsClock.tick(FPS)


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow