Tu t'adresser à ton joueur directement avec des pancartes ? OK, voici comment faire
Créer une variable publique
Pour commencer, crée ce variable public, en dehors d'une fonction, dans le script game.js
.
let pancartes ;
Créer la classe pancarte
Ensuite, ajoute cette nouvelle classe dans le script game.js
.
class pancarte {
constructor(image){
// ici sont déclarés les variables de chaque pancartes
this.img = image ;
}
}
Créer les fonction newPancarte(), deletePancarte( ) et pancarteDisplay()
Ensuite, toujours dans le même script, ajoute ces trois nouvelles fonctions.
function newPancarte( img ){
// cette fonction crée une nouvelle pancarte
pancartes = new pancarte( img ) ;
}
function deletePancarte( ){
// cette fonction crée une nouvelle pancarte
pancartes = null ;
}
function pancarteDisplay(){
// cette fonction affiche les pancartes
if(pancartes){
let img = pancartes.img ;
let c = img.height / img.width ;
let h = view.height ;
let x = view.width / 2 ;
let y = view.height / 2 ;
push();
translate(x , y);
image( img , 0 , 0 , h , h * c ) ;
pop();
}
}
Effacer la pancarte quand le joueur se déplace
Une fois que la pancarte se sera affichée, il va nous falloir pouvoir la retirer. Je te propose que la pancarte disparaisse quand le joueur effectue un déplacement. Dans le script control.js
, rajoute cette ligne dans les fonction moveControl.()
et rotationControl()
function moveControl( d ) {
//déplacement du joueur
let r = -playerR[1] * HALF_PI ;
let x = playerPos[0].x - d * round( sin( r ) ) ;
let y = playerPos[0].y - d * round( cos( r ) ) ;
opponent = enemyCheck( x , y ) ;
if ( opponent!=null ) {
// un ennemi est sur la case ou se dirige le joueur
if ( d > 0 ) {
attack( opponent ) ;
}
else twist() ;
enemyTurn() ;
savedTime = millis() ;
}
else if ( pathCheck( x , y , true , true ) ) {
// la salle ou se dirige le joueur est libre
deletePancarte( );
let thisItem = itemCheck( x , y ) ;
if ( thisItem != null ) pick( thisItem ) ;
else playerPos[1] = createVector( x , y ) ;
if ( d < 0 ) vGrid = viewGrid( x , y , [ playerR[1] ] ) ;
savedTime = millis() ;
enemyTurn() ;
}
else {
// le joueur se dirige contre un mur
let r = rooms[ playerPos[1].x ][ playerPos[1].y ] ;
let l = r.walls.length ;
for ( let i = 0 ; i < l ; i++ ) {
if( r.walls[i].num == moduloPos() ) actionWall( r.walls[i] ) ;
}
}
}
function rotationControl( r ) {
//rotation du joueur
let c = [];
for( let i = 0 ; i <= abs( r ) ; i ++ ){
if ( r < 0 ) c[i] = playerR[0] - i ;
else if( r > 0 ) c[i] = playerR[0] + i ;
}
playerR[1] = ( playerR[1] + r ) ;
vGrid = viewGrid( playerPos[1].x , playerPos[1].y , c ) ;
savedTime = millis() ;
enemyTurn() ;
deletePancarte( );
}
Afficher l'effet
Nous y sommes presque, il nous reste encore à afficher l'effet au bon endroit. Toujours dans le script game.js
, trouve la fonction game()
et ajoutes-y cette ligne.
function game(){
background( 0 ) ;
viewDisplay() ;
inventoryDisplay();
pancarteDisplay();
if ( animation() ) playerControl() ;
}