Limites de déplacement
Limites de déplacement
Le personnage comme les projectiles peuvent sortir de l'écran.
Pour les projectiles, ce n'est pas un problème en soit, parce qu'on pourrait créer de nouveaux projectiles. Mais si on veut que la partie dure un certain temps, il nous faut créer beaucoup de nouveaux projectiles. Et ça peut être un problème pour proposer des motifs de projectiles intéressants. On va donc laisser ça de côté pour beaucoup plus tard dans le projet, et plutôt faire en sorte de garder les projectiles à l'écran, en les faisant rebondir sur les murs.
C'est aussi problématique pour le personnage, si il sort de l'écran, le joueur ne sait plus où il est, d'autant que si le joueur peut sortir de l'écran et pas les projectiles, il n'aurait qu'à sortir de l'écran pour les éviter tous.
On va commencer par limiter les
Principe
Pour limiter les mouvements du personnage, ce n'est pas très compliqué :
Si le centre du personnage arrive plus proche d'un bord de l'écran que sa taille, on le déplace à la bonne distance du bord.
TODO (prof) ajouter schéma ici
Simulation
On va écrire une fonction pour ça, limiter_deplacement_personnage
. On teste chaque bord un par un. Remarquez qu'on utilise donc des if
et non des elif
, parce que plusieurs bords peuvent être concernés en même temps.
def limiter_deplacement_personnage(etat):
p = etat.simulation.personnage
if p.position.x < TAILLE_PERSONNAGE:
p.position.x = TAILLE_PERSONNAGE
if p.position.x > LARGEUR_FENETRE - TAILLE_PERSONNAGE:
p.position.x = LARGEUR_FENETRE - TAILLE_PERSONNAGE
if p.position.y < TAILLE_PERSONNAGE:
p.position.y = TAILLE_PERSONNAGE
if p.position.y > HAUTEUR_FENETRE - TAILLE_PERSONNAGE:
p.position.y = HAUTEUR_FENETRE - TAILLE_PERSONNAGE
On appelle ensuite cette fonction dans la simulation, après avoir déplacé le personnage.
def avancer_simulation(etat, t):
deplacer_personnage(etat, t)
limiter_deplacement_personnage(etat)
deplacer_projectiles(etat, t)
detecter_collisions(etat)
Si on lance le programme, on peut voir que le personnage est "bloqué" par les bords de l'écran.
Le code complet se trouve dans le dépliant ci-dessous.