Nous allons avoir besoin d'une bibliothèque que Processing ne nous propose pas...
Il s'agit de la librairie P5play.js, qui possède tout un arsenal de méthodes qui facilite la gestion des mouvements, les collisions etc...
Suivre la procédure suivante:
<script language="javascript" type="text/javascript" src="libraries/p5.play.js"></script>
|
Cela aura pour effet d'afficher l'image dans le canvas. |
var sol;
setup()
on crée le sprite : sol=createSprite(190,585,400,32);
sol.immovable=true;
draw()
avec la commande drawSprites();
var perso_walk;
, var perso_wait;
, var perso;
, var perso_bouge;
et var perso_attend;
preload()
avec les commandes:
perso_walk=loadAnimation("data/persomove-001.png","data/persomove-002.png","data/persomove-003.png","data/persomove-004.png");
perso_wait=loadImage('data/persostand-001.png');
Dans le setup()
on rajoute :
perso=createSprite(100,height-220);// création du personnage
perso_bouge=perso.addAnimation("walk",perso_walk);// ajout des animations de déplacements
perso_attend=perso.addAnimation("wait",perso_wait);
perso.changeAnimation("wait");// mise en position attente...
Dans le draw()
on rajoute (avant drawSprites()
:
perso.addSpeed(0.2, 90);// gère la gravité 0.2 est ajouté dans la dirction y puisque l'angle est de 90°
perso.bounce(sol,frottement);// collision avec le sol qui renvoie à la fonction frottement
Il faut donc rajouter une fonction frottement:
function frottement(){
perso.velocity.y=0;
}
Et puisqu'on y est, rajoutons les déplacements du personnage:
function keyPressed(){
if (keyCode==38){// flêche haut
perso.addSpeed(9.5,270); // direction haut , angle de 270°
perso.velocity.x=80;
}
if (keyCode==37){// flêche gauche
perso.mirrorX(-1); // symétrie en x
perso.changeAnimation("walk");// animation walk
perso.velocity.x=-2;
} else if (keyCode==39){// flêche droite
perso.mirrorX(1);
perso.changeAnimation("walk");
perso.velocity.x=2;
} else {
perso.changeAnimation("wait");
perso.velocity.x=0;
}
}
function keyReleased(){// quand on relâche les touches
perso.changeAnimation("wait");
perso.velocity.x=0;
}
var isjump=false;
et qui deviendra true
lorsque le personnage est en l'air. Il faudra également la remettre à false lorsque le personnage touche le sol. keypressed()
on modifie le code comme suit:
if (keyCode==38){
if(isjump==false){
perso.addSpeed(9.5,270);
perso.velocity.x=80;
isjump=true;
}
}
Dans la fonction frottement()
on rajoute isjump=false;
var plateforme1;
et dans le setup()
on crée un sprite plateforme1=createSprite(560,400,240,40);
que l'on rend insensible au rebond plateforme1.immovable=true;
draw()
on rajoute ceci perso.bounce(plateforme1,frottement);
pour la collision du personnage avec cette plateforme.preload
avec : exit=loadImage('data/exit.png');
sortie=createSprite(650,50);
dans le setup()
sortie.addImage(exit);
changementNiveau();
dans le draw()
changementNiveau();
function changementNiveau(){
if (perso.overlapPoint(sortie.position.x, sortie.position.y)){
level=level+1;
perso.position.x=82;
perso.position.y=height-220;
}
}
for (var i = votre_groupe.length; i--; votre_groupe[i].remove());