Survol et surbrillance
Fait partie de la section La boucle de jeu du Journey Pygame de Coddy. Leçon 15 sur 32.
Tester gx <= x <= gx + 30 à chaque fois devient fastidieux. Pygame possède une classe pour les rectangles, pygame.Rect, qui regroupe une position et une taille et effectue ces tests pour vous :
gem = pygame.Rect(225, 165, 30, 30)
if gem.collidepoint(event.pos):
score += 1gem.collidepoint(point) vaut True lorsque le point se trouve à l'intérieur du Rect. Vous pouvez toujours lire et modifier gem.x et gem.y, et un Rect nomme les points qui lui sont propres : gem.midtop, gem.midright, gem.midbottom et gem.midleft correspondent aux milieux de ses côtés, qui sont les quatre coins de la gemme.
Le même test avec la position du pointeur vous indique si le joueur pointe vers la gemme. Les jeux le signalent en la mettant en évidence :
if gem.collidepoint(pygame.mouse.get_pos()):
pygame.draw.rect(screen, (255, 196, 0), gem.inflate(10, 10), 2)gem.inflate(10, 10) crée un nouveau Rect 10 pixels plus large et plus haut, avec le même centre, de sorte que le contour se trouve à 5 pixels à l'extérieur de la gemme.
Défi
Facile- Remplacez
gx, gy = 225, 165pargem = pygame.Rect(225, 165, 30, 30), et utilisezgem.xetgem.ylà où vous utilisiezgxetgy. - Dessinez la gemme à partir de
[gem.midtop, gem.midright, gem.midbottom, gem.midleft], et détectez les clics avecgem.collidepoint(event.pos). - Après la gemme, lorsque le pointeur est dessus, dessinez le contour jaune
(255, 196, 0)degem.inflate(10, 10), d’une largeur de2pixels.
Essayez vous-même
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Hunt")
clock = pygame.time.Clock()
gx, gy = 225, 165
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
x, y = event.pos
if gx <= x <= gx + 30 and gy <= y <= gy + 30:
score += 1
gx = random.randint(15, 435)
gy = random.randint(55, 315)
screen.fill((30, 30, 46))
gem_points = [(gx + 15, gy), (gx + 30, gy + 15), (gx + 15, gy + 30), (gx, gy + 15)]
pygame.draw.polygon(screen, (80, 220, 255), gem_points)
for i in range(score):
pygame.draw.rect(screen, (240, 110, 180), (10 + 10 * i, 14, 8, 8))
mouse_x, mouse_y = pygame.mouse.get_pos()
pygame.draw.circle(screen, (240, 240, 240), (mouse_x, mouse_y), 10, 2)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Toutes les leçons de La boucle de jeu
1Déplacer un carré
Ouvrir une fenêtreRemplir l’arrière-plan4Déplacement en fonction du temps
Temps deltaPixels par secondeVector2Accélération et frictionBoucler autour de l’écran3La souris
Suivre le pointeurCliquer sur la gemmeEntraînez-vous par vous-même : Playground Pygame