pygame
Tekening op het scherm
Zoeken…
vormen, tekst en afbeeldingen op het scherm tekenen met een kleine animatie
Dit programma tekent enkele vormen op het display, teken "hallo wereld!" in het midden van het scherm en laat een afbeelding naar elke hoek van het venster gaan. U kunt elke gewenste afbeelding gebruiken, maar u moet het afbeeldingsbestand in dezelfde map plaatsen als uw programma.
de volledige code:
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)
de witte achtergrond tekenen:
screen.fill(white)
de veelhoek tekenen:
In deze functie definieert u het weergaveoppervlak, de kleur en de positie van elke hoek van de veelhoek, u kunt dat met de klok mee en tegen de klok in doen.
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
lijnen tekenen:
Hier definieert u het weergaveoppervlak, de kleur, het eerste en het laatste punt en de breedte van de lijn.
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)
de cirkel tekenen:
In deze functie definieert u het weergaveoppervlak, de kleur, de positie, de straal en de breedte van de cirkel (0 geeft een gewone cirkel).
pygame.draw.circle(screen, blue, (300, 50), 20, 0)
de ellips tekenen:
In deze functie definieert u het weergaveoppervlak, de kleur, de positie, de horizontale grootte, de verticale grootte en de breedte van de ellips
pygame.draw.ellipse(screen, red, (100, 150, 40,80), 1)
de rechthoek tekenen:
In deze functie definieert u het weergaveoppervlak, de kleur, de positie en de verticale en de horizontale grootte van de rechthoek.
pygame.draw.rect(screen,red, (200, 150, 100, 50))
het definiëren van de tekst:
Eerst definieer je het type en de grootte van je tekst, ik gebruik een standaardlettertype dat je krijgt met pygame.
font_obj = pygame.font.Font('freesansbold.ttf', 32)
Vervolgens definieert u de eigenlijke tekst, of u deze nu vet of niet (waar / onwaar) wilt, de kleur van de tekst en, als u uw tekst wilt markeren, een kleur van de markering.
text_surface_obj = font_obj.render('Hello World!', True, green, blue)
Als je je tekst wilt markeren of het midden van je tekst wilt definiëren, moet je pygame dat vertellen met deze functie:
text_rect_obj = text_surface_obj.get_rect()
En daarna kunt u het midden van uw tekst definiëren met deze functie:
text_rect_obj.center = (200, 150)
de tekst tekenen:
Als u uw tekst hebt gemarkeerd of het midden hebt gedefinieerd, moet u de tekst op deze manier tekenen:
screen.blit(text_surface_obj, text_rectObj)
Anders teken je je tekst, maar je moet de positie definiëren, dus je doet dit op deze manier:
DISPLAYSURF.blit(textSurfaceObj, (100,50))
het definiëren van de afbeelding:
Hier definieert u de afbeelding die u wilt gebruiken, de startpositie (x- en y-coördinaten) en de richting van de afbeelding.
image = pygame.image.load('image.png')
imagex = 360
imagey = 260
direction = 'left'
animeren van de afbeelding:
Hier controleert u de richting van de afbeelding, als deze een hoek heeft bereikt, zo ja, wijzigt u de richting, zo niet, verplaats deze dan 5 pixels in dezelfde richting en teken de afbeelding opnieuw. Dat is wat we doen met dit deel van de code:
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))
opmerking: mijn afbeelding is 20 bij 20 pixels, ik gebruikte if imagex == 360
en if imagey == 260:
omdat mijn afbeelding zich dan 20 pixels vanaf de rand bevindt, als uw afbeelding een andere grootte heeft, moet u de cijfers wijzigen .
controleren of je het programma hebt afgesloten:
Hier controleren we of u het venster van uw programma hebt gesloten.
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
het display bijwerken:
Hier vertel je pygame om de weergave bij te werken zodat alles wat je hebt getekend op het scherm verschijnt.
pygame.display.update()
de frames per seconde definiëren:
Hier vertel je pygame om voldoende te slapen zodat de frames per seconde-instelling wordt gerespecteerd.
fpsClock.tick(FPS)