questa situazione è difficile da spiegare, quindi cerchiamo di illustrare con una foto: Perché lineTo() cambia i pixel interni?
quei pixel all'interno della prima forma creata sono alleggerite. Lo schermo viene cancellato con il nero, le caselle rosse e verdi sono disegnate, quindi il tracciato viene disegnato. L'unica soluzione che ho trovato finora è stata l'impostazione della larghezza della linea delle caselle a 2 pixel, per i motivi indicati here.
Ecco il codice utilizzato per disegnare le piazze:
sctx.save();
sctx.strokeStyle = this.color;
sctx.lineWidth = this.width;
sctx.beginPath();
sctx.moveTo(this.points[0].x, this.points[0].y);
for (var i = 1; i < this.points.length; i++)
{
sctx.lineTo(this.points[i].x, this.points[i].y);
}
sctx.closePath();
sctx.stroke();
sctx.restore();
e le linee:
sctx.save();
sctx.strokeStyle = 'orange';
sctx.lineWidth = 5;
console.log(sctx);
sctx.beginPath();
sctx.moveTo(this.points[0].x, this.points[0].y);
for (var i = 1; i < this.points.length; i++)
{
sctx.lineTo(this.points[i].x, this.points[i].y);
}
sctx.closePath();
sctx.stroke();
sctx.restore();
e una foto della stessa situazione in cui le scatole sono disegnati in larghezza 2px:
lineTo()
forse ha problemi con i valori alfa? Qualsiasi aiuto è molto apprezzato.
MODIFICA: per chiarire, la stessa cosa si verifica quando viene omesso sctx.closePath();
dal percorso in corso.
C'è qualche possibilità che tu possa lanciare un jsfiddle? – jcolebrand
Forse, se davvero devo. Sto usando una libreria piuttosto considerevole (di mia creazione): https://github.com/Bloodyaugust/SugarLab, quindi dovrei ridurne un sacco per renderlo utile. – Bloodyaugust
Direi che la tua analisi è corretta, i riquadri vengono disegnati a opacità ridotta e disegnando la forma sopra di esso è possibile ripristinare quelle caselle "all'interno" della forma in piena opacità. Temo di non conoscere abbastanza le tecnologie coinvolte per speculare sul perché. –