nsi:tds:pygame:plateforme:main
Ceci est une ancienne révision du document !
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Table des matières
main
Reprend le principe général de ce que vous pouvez trouver dans l'attaque des morts-vivants.
Problème de touches
Nous allons toutefois apporter une modification : Nous voulons pouvoir appuyer simultanément sur plusieurs touches. Par exemple, si je maintiens KEY_RIGHT et que j'appuie sur KEY_UP, je veux que le sprite saute sans cesser d'aller vers la droite.
Quelques précisions sont utiles :
- Pygame détecte les événements
KEYUPetKEYDOWN, c'est à dire le moment précis où on enfonce une touche ou le moment où on la relâche. Pygame ne détecte pas qu'une touche est en train d'être appuyée. - Nous avons utilisé pour les zombies la commande
pygame.key.set_repeat(…). Cette commande permet de faire comme si on pianotait sur une touche alors qu'en vérité on la maintient appuyée.
Cette commande ne convient pas puisqu'elle ne tient compte que de la dernière touche appuyée.
À la place, nous allons utiliser pygame.keys.get_pressed() qui tient la liste de l'état de toutes les touches.
keys = pygame.keys.get_pressed()
if keys[KEY_UP]:
# le test vérifie si la touche flèche haut est appuyée
Ainsi, rien ne nous empêchera d'avoir simultanément keys[KEY_LEFT] et keys[KEY_UP]appuyés simultanément.
Script complet
# fichier main.py
import pygame
from player import Player
from rectangle import Rectangle
from coin import Coin
pygame.init()
pygame.display.set_caption("Le rectangle qui saute")
LARGEUR = 800
HAUTEUR = 600
screen = pygame.display.set_mode((LARGEUR, HAUTEUR))
clock = pygame.time.Clock() # gestion du temps
all_sprites = pygame.sprite.Group()
platesformes_sprites = Rectangle.make_plates_formes([
(0, HAUTEUR-10, LARGEUR, 50), # base
(100, HAUTEUR-60, 200, 10),
(250, HAUTEUR-110, 200, 10),
(440, HAUTEUR-160, 200, 10)
], (255,0,0))
coins_sprites = Coin.make_coins([
(300, HAUTEUR-20, "dollar"),
(150, HAUTEUR-70, "dollar")
])
player = Player(50, HAUTEUR - 100, 0, LARGEUR)
all_sprites.add(platesformes_sprites, coins_sprites, player)
# ordre important pour que player soit devant les récompenses !
left_pressed = False
right_pressed = False
up_pressed = False
running = True
while running:
clock.tick(30)
screen.fill((0,0,0))
player.update_position(platesformes_sprites)
all_sprites.draw(screen)
for event in pygame.event.get():
if event.type == pygame.QUIT: # fermeture fenêtre
running = False
keys = pygame.key.get_pressed() # liste de l'état des touches
if keys[pygame.K_LEFT] and not keys[pygame.K_RIGHT]:
player.move_left()
if keys[pygame.K_RIGHT] and not keys[pygame.K_LEFT]:
player.move_right()
if keys[pygame.K_UP]:
player.jump()
hitten_coins = pygame.sprite.spritecollide(player, coins_sprites, True)
pygame.display.flip()
pygame.quit()
nsi/tds/pygame/plateforme/main.1679170811.txt.gz · Dernière modification : de goupillwiki
