Les pics peuvent permettre d'apporter un peu de challenge pour le joueur, ou encore de contraindre sa circulation.
Charger une image
load.jsconst PNG = [ "spike" , "grass" , "bean" , ]
Charger un effet sonore
load.jsconst MP3 = [ "hit" , "wooosh" , "off" , ]
Créer un composant
component.js// Ajoutes ici tes propres composants
function danger( damage = 1 , collision = ["top","left","bot","right"] , ongoing = false , target = null ) { // blesse le joueur à son contact return { add() { const c = ongoing ? "collideUpdate" : "collide" this.on( c , (obj, col) => this.checkDangerColission(obj, col) ) }, checkDangerColission(obj, col) { if ( obj.is("character") && (target==null || obj.is(target) ) ) { let b = false for (const c of collision){ if ( c == "top" && col.isTop() ) this.dangerHit(obj) else if ( c == "left" && col.isLeft() ) this.dangerHit(obj) else if ( c == "bot" && col.isBottom() ) this.dangerHit(obj) else if ( c == "right" && col.isRight() ) this.dangerHit(obj) } } }, dangerHit(obj) { if ( obj.hit(damage) ) play("hit") }, } }
Déclarer un symbole
level.jsconst levelConf = { // paramètres du niveau tileWidth: 64, tileHeight: 64, tiles: { // listes des objet à placer dans les niveaux
"M": () => [ // pic à l'endroit sprite("spike"), area(), area({scale:vec2(0.6,1)}), anchor("bot"), offscreen({ hide: true }), danger(), ],"W": () => [ // pic à l'envers sprite("spike"), pos(0,-64), area({scale:vec2(0.6,1)}), anchor("bot"), rotate(180), offscreen({ hide: true }), danger(), ],"S": () => [ // pic à l'envers sprite("spike"), pos(-32,-32), area({scale:vec2(0.6,1)}), anchor("bot"), rotate(90), offscreen({ hide: true }), danger(), ],"Z": () => [ // pic à l'envers sprite("spike"), pos(32,-32), area({scale:vec2(0.6,1)}), anchor("bot"), rotate(270), offscreen({ hide: true }), danger(), ],"#": () => [ // player sprite("bean"), platformerController(), health(1), character(), area(), anchor("bot"), body(), ], "=": () => [ // bloc sprite("grass"), area(), body({ isStatic: true }), anchor("bot"), offscreen({ hide: true }), ], }, }
Placer les objets
level.jsconst LEVELS = [ // liste des niveaux du jeu [ " === M M M M " , " === ==== === " , " W W Z==S " , " " , " Z==S Z==S " , " # M M == M M " , "=================== " , ], ];
la taille de la hitbox
Pour éviter que le joueur ne soit touché trop facilement, il est possible peux rétrécir la zone de contact des pics dans le composant area
.
La première valeur permet de modifier la taille horizontale, la seconde permet de modifier la taille verticale ( 1
, 1
pour la taille originale )
area( { scale : vec2( 0.6 , 1 ) } )
le nombre de dégâts
Le premier paramètre du composant danger
permet de spécifier le nombre de points de vie que le pic fait perdre au joueur.
danger( 1 )
la direction de la collision
Le deuxième paramètre du composant danger
permet de spécifier dans quelle direction la collision avec les pics cause des dégâts ( "top"
, "left"
, "bot"
ou "right"
).
danger( 1 , ["top","left","bot","right"] )
si les dégâts sont continus
Le troisième paramètre du composant danger
permet de spécifier si le pic ne fait des dégâts qu'au moment de la collision (false
) ou de manière continue (true
).
Dans ce dernier cas de figure, tu pourrait être tenté de régler le délai d'invincibilité des personnages dans le composant character
du script player.js
danger( 1 , ["top","left","bot","right"] , true )
une cible
Le cinquième paramètre du composant danger
permet de spécifier quels éléments sont sensibles aux dégats causés par les pics.
L'identifiant "character"
permet de rendre le pic hostile pour tous les objets ayant un composant character
, l'identifiant "player"
permet de ne rendre le pic hostile que pour les joueurs.
Il est aussi possible de créer son propre identifiant et de l'attribuer aux objets de son choix.
danger( 1 , ["top","left","bot","right"] , true , "player" )
avec un personnage mobile

