Fix "à la collision" — la marge de 3px restait insuffisante
forgeWouldCollide (personnage-controller.js) bloque le déplacement par PAS ENTIER (cmd.vitesse px/tick, 4 par défaut mais réglable) : le joueur peut donc rester bloqué jusqu'à PRESQUE un pas entier de distance de l'obstacle, pas seulement 1-3px — la marge de tolérance du correctif précédent (3px) restait insuffisante même pour la vitesse par défaut dans les cas les moins favorables. Portée à 24px, confortable pour toute vitesse raisonnablement configurée sans jamais déclencher "à la collision" alors que les objets sont encore visiblement séparés. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
3a67ba622b
commit
726775fe4e
@@ -32,17 +32,24 @@ function forgeElementBoxRect(el, collision) {
|
|||||||
return forgeCollisionRectFromBox({ left: left, top: top, width: width, height: height }, collision);
|
return forgeCollisionRectFromBox({ left: left, top: top, width: width, height: height }, collision);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Une petite marge (px) appliquée SEULEMENT à la détection du
|
// Une marge (px) appliquée SEULEMENT à la détection du déclencheur
|
||||||
// déclencheur "collision" ci-dessous — jamais au blocage physique du
|
// "collision" ci-dessous — jamais au blocage physique du déplacement
|
||||||
// déplacement (forgeWouldCollide, personnage-controller.js, qui reste
|
// (forgeWouldCollide, personnage-controller.js, qui reste strict). Bug
|
||||||
// strict). Bug corrigé : un objet est presque toujours aussi un
|
// corrigé : un objet est presque toujours aussi un OBSTACLE SOLIDE
|
||||||
// OBSTACLE SOLIDE (collision activée par défaut) — le joueur ne peut
|
// (collision activée par défaut) — le joueur ne peut donc jamais aller
|
||||||
// donc jamais aller au-delà d'un contact tangent (bords qui se touchent
|
// au-delà d'un contact tangent, et un chevauchement STRICT
|
||||||
// SANS se chevaucher), et un chevauchement STRICT (forgeShapesOverlap
|
// (forgeShapesOverlap nu) n'était donc jamais atteint : la règle "à la
|
||||||
// nu) n'était donc jamais atteint : la règle "à la collision" ne se
|
// collision" ne se déclenchait jamais. forgeWouldCollide bloque le
|
||||||
// déclenchait jamais. Cette marge élargit la boîte testée pour que ce
|
// déplacement PAR PAS ENTIER (cmd.vitesse px/tick, 4 par défaut mais
|
||||||
// simple contact compte comme une collision.
|
// réglable plus haut dans "Commandes") : le joueur peut donc rester
|
||||||
var FORGE_COLLISION_RULE_TOUCH_MARGIN = 3;
|
// bloqué jusqu'à PRESQUE un pas entier de distance de l'obstacle, pas
|
||||||
|
// seulement 1-2px — une marge trop petite (ex. 3px) restait donc
|
||||||
|
// insuffisante pour une vitesse par défaut déjà. 24px couvre
|
||||||
|
// confortablement toute vitesse raisonnablement configurée, tout en
|
||||||
|
// restant petit face à la taille d'un sprite (souvent 64-128px) pour ne
|
||||||
|
// jamais déclencher "à la collision" alors que les objets sont encore
|
||||||
|
// visiblement séparés.
|
||||||
|
var FORGE_COLLISION_RULE_TOUCH_MARGIN = 24;
|
||||||
|
|
||||||
function forgeExpandRect(rect, margin) {
|
function forgeExpandRect(rect, margin) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user