ctx silih berganti. Gunakan strokeStyle apabila menggunakan requestAnimationFrame()
P粉605385621
2023-08-01 16:06:12
<p>Saya cuba melukis gerakan rawak mudah sebagai kanvas latar belakang untuk halaman pendaratan saya dan saya menghadapi masalah mendapatkan garisan untuk mempunyai warna yang unik. <br /><br /> Saya juga cuba menukarnya selepas filem tidak berjaya (hanya kelihatan seperti warna campuran). </p><p><br /></p>
<p><br /></p>
<pre class="brush:js;toolbar:false;">const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
//ctx.canvas.width = window.innerWidth;
//ctx.canvas.height = window.innerHeight*4;
const numSteps = ctx.canvas.width / 2 + 10;
const stepSize = 10;
const startX = 0;
const startY = canvas.height / 2;
const timeInterval = 15;
var Point = function(color_inp){
ini.x = mulaX;
ini.y = mulaY;
this.color = color_inp;
}
warna const = [
'#FF1493', // Merah jambu
'#FF00FF', // Magenta
'#800080', // Ungu
'#4B0082', // Indigo
'#0000FF', // Biru
'#00FFFF', // Cyan
'#00FF00', // Hijau
'#FFFF00', // Kuning
'#FF7F00', // Jingga
'#8B4513' // Pelana Coklat
];
fungsi drawRandomWalk(stPoint, langkah) {
ctx.globalAlpha = 0.01;
biarkan stepCount = 0;
ctx.beginPath();
ctx.strokeStyle = stPoint.color;
ctx.moveTo(stPoint.x, stPoint.y);
setTimeout(drawStep, 10);
fungsi drawStep() {
jika (StepCount >= langkah) {
kembali;
}
ctx.moveTo(stPoint.x, stPoint.y);
arah const = Math.random() <
stPoint.y += stepSize * arah;
stPoint.x = startX + stepCount * 2;
ctx.lineTo(stPoint.x, stPoint.y);
ctx.lineWidth = 1;
ctx.stroke();
stepCount++;
requestAnimationFrame(drawStep);
}
}
untuk (warna const warna)
{
const startPoint = new Point(warna);
drawRandomWalk(startPoint, numSteps);
}</pre>
<pre class="brush:html;toolbar:false;"><canvas id="myCanvas" width="600" height="600"></canvas></pre>
<p><br /></p>
Masalahnya ialah setiap "pen" yang melukis garisan berkongsi menyatakan - anda sedang melukis laluan panjang yang terdiri daripada banyak pergerakan/garisan, berulang kali.
Jika anda mahukan kesan kecerunan globalAlpha (yang bergantung pada keupayaan melukis garisan berulang kali), anda perlu menjejak setiap lukisan pen secara individu dan melukisnya seperti yang ditunjukkan di bawah.
Saya menyingkirkan struktur Point kerana ia tidak begitu diperlukan.