Sök…


Ritning och en grundläggande animation

Detta program drar några former och " hej världen! 'och låt en bild gå till varje fönsterhörn.

den fullständiga 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((500,400), 0, 32)
pygame.display.set_caption('drawing')

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

imageImg  = pygame.image.load('baddie.png')
imagex = 320
imagey = 220
direction = 'left'

fontObj = pygame.font.Font('freesansbold.ttf', 32)
text = fontObj.render('Hello World!', True, green, blue)
rect = text.get_rect()
rect.center = (200, 150)

# the main game loop
while True:
    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), 100, 0)

    # draw a red ellipse onto the surface
    pygame.draw.ellipse(screen, red, (300, 250, 80,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, rect)

    if direction == 'right':
        imagex += 5
        if imagex == 320:
            direction = 'down'
    elif direction == 'down':
        imagey += 5
        if imagey == 220:
            direction = 'left'
    elif direction == 'left':
        imagex -= 5
        if imagex == 20:
           direction = 'up'
    elif direction == 'up':
        imagey -= 5
        if imagey == 20:
           direction = 'right'
    screen.blit(imageImg, (imagex, imagey))

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

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

ställa in pygame och fönstret:

import pygame,sys
from pygame.locals import *

pygame.init()

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

rita den vita bakgrunden:

I den här funktionen definierar du bakgrundens färg.

screen.fill(white)

Rita den gröna polygonen:

Här definierar du skärmytan, färgen och positionen för varje hörn i polygonen (x- och y-koordinater), du kan göra det medsols och moturs.

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

Rita de blå linjerna:

I den här funktionen definierar du skärmytan, färgen, den första och den sista punkten och bredden på linjen (om du inte ger en bredd är det bara 1).

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 den blå cirkeln:

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

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

rita ellipsen:

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

pygame.draw.ellipse(screen, red, (300, 250, 80,80), 1)

rita rektangeln:

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

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

definiera texten:

Först definierar du typen och storleken på din text med denna funktion:

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

Sedan definierar du den faktiska texten, om texten är fet, färgen och, om du vill, färgen på markeringen. Du kan göra det med den här funktionen:

text = fontObj.render('Hello World!', True, green, blue)

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

rect = text.get_rect()

Och om du vill definiera positionen för textens centrum kan du göra det med den här funktionen:

rect.center = (200, 150)

rita texten:

Om du definierade en markering och / eller centrum:

screen.blit(text, rect)

Annars måste du definiera textens placering så rita texten på detta sätt:

screen.blit(text, (100,50))

definiera bilden:

Här definierar du vilken bild du vill använda (om du gör det på detta sätt måste bildfilen vara i samma katalog som din programfil), startpositionen (x och y) och bildens riktning.

image  = pygame.image.load('image.png')
baddiex = 320
baddiey = 220
direction = 'left'

animera bilden:

Med denna del av koden kontrollerar vi bildens riktning, om den nådde ett hörn, om så är fallet, ändra riktningen, om inte, rita bilden 5 pixlar längre i samma riktning.

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(imageImg, (imagex, imagey))

Obs: Min bild är 20x20 pixlar, jag använder if imagex == 360: och if imagey == 260: för då är min bild 20 pixlar från fönsterkanten, precis som de andra två hörnen. Om din bild har en annan storlek måste du förmodligen ändra dessa nummer.

kontrollerar för att sluta:

Här kontrollerar vi om du stängde pygame-fönstret, och i så fall stänger du fönstret, om du inte skriver det någonstans i ditt program kommer du förmodligen inte att kunna stänga fönstret.

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

uppdatering av skärmen:

Med den här funktionen uppdaterar du skärmen så att allt du har ritat blir synligt.

pygame.display.update()

FPS-inställning:

Med den här funktionen ber du pygame att sova tillräckligt så att din FPS-inställning respekteras.

fpsClock.tick(FPS)

Användning med PIL

När du måste använda både PIL och Pygame eftersom det saknas funktioner i båda, behöver du ett sätt att konvertera mellan Pygame-ytor och PIL-bilder, helst utan att skriva dem till disken.

För det kan du använda "tostring" och "fromstring" -funktioner som tillhandahålls i båda biblioteken.

Konvertering från PIL till Pygame:

strFormat = 'RGBA'
raw_str = image.tostring("raw", strFormat)
surface = pygame.image.fromstring(raw_str, image.size, strFormat)

Konvertering från Pygame till PIL:

strFormat = 'RGBA'
raw_str = pygame.image.tostring(surface, strFormat, False)
image = Image.frombytes(strFormat, surface.get_size(), raw_str)


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