1

だから私は最近、パーティクルシステムでよく遊んでいます。花火を作ろうと思っていたのですが、「トレイル」の作り方を学ぶ過程で行き詰まりました。私が理解している限り、塗りつぶしスタイルが rgba(0,0,0,0.5); の場合、globalcompositeoperation の destination-out はキャンバス上に黒い透明な画像を置く必要があります。しかし、奇妙なことに、これを行うとキャンバスが白くなります。ここでなぜ、または何が間違っているのかわかりません。ここにペンがあります

window.reqFrame = (function() {
  return window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame ||
    window.msRequestAnimationFrame ||
    window.oRequestAnimationFrame ||
    window.requestAnimationFrame ||
    function(callback) {
      window.setTimeout(callback, 1000 / 60);
    };
})();

var canvas, ctx;
var W = window.innerWidth;
var H = window.innerHeight;
particles = [];


function particle() {
  this.x = W / 2;
  this.y = H / 2;
  this.vx = -4;
  this.c = "#FF0000";
}

particle.prototype.draw = function() {
  ctx.moveTo(this.x, this.y);
  ctx.lineTo(this.x - 4, this.y);
  ctx.strokeStyle = "#FF0000";
  ctx.stroke()
}

particle.prototype.update = function() {
  this.x += this.vx;
}


function loop() {
  ctx.globalCompositeOperation = "destination-out";
  ctx.fillStyle = "rgba(0,0,0,0.5)";
  ctx.fillRect(0, 0, W, H);
  ctx.globalCompositeOperation = "source-over";
  particles[0].draw();
  particles[0].update();
  reqFrame(loop);
}

function paintRect(color, x, y, w, h) {
  ctx.fillStyle = color;
  ctx.fillRect(x, y, w, h);
}

function paintCanvas(color) {
  ctx.fillStyle = color;
  ctx.fillRect(0, 0, W, H);
}

function init() {
  canvas = document.getElementById('canvas');
  ctx = canvas.getContext('2d');
  canvas.width = W;
  canvas.height = H;
  particles.push(new particle());
  loop();

}

init();
body {
  overflow: hidden;
}
<canvas id="canvas"></canvas>

私が取り組んでいることに。これは私がグローバルコンポジットを扱っているだけなので……そうです。

4

0 に答える 0