複数の四角形を描画してから、globalCompositeOperation 'source-in' を使用してそれらをマスクしようとしていますが、問題は、四角形を塗りつぶすと消えてしまうことです... fill() 呼び出しが 1 つしかない場合、それらはすべて適切に描画されますただし、最後に適用された塗りつぶしスタイルのみを尊重します。
問題のコード -
ctx.drawImage(self.glass.mask, 256, 375);
ctx.globalCompositeOperation = 'source-in';
ctx.rect(256, 635, 256, 75);
ctx.fillStyle = "#c65127";
ctx.rect(256, 605, 256, 25);
ctx.fillStyle = "#f5f4f0";
ctx.rect(256, 565, 256, 35);
ctx.fillStyle = "#c65127";
ctx.fill();
上記のコードは正常に動作します。しかし、これを行ってマスクを外すと -
ctx.beginPath();
ctx.rect(0, 256, 256, 75);
ctx.fillStyle = "#c65127";
ctx.fill();
ctx.beginPath();
ctx.rect(0, 226, 256, 25);
ctx.fillStyle = "#f5f4f0";
ctx.fill();
ctx.beginPath();
ctx.rect(0, 186, 256, 35);
ctx.fillStyle = "#222";
ctx.fill();
私はそれぞれの長方形を持っており、それらは塗りつぶしスタイルを尊重しています。問題は、マスクを有効にすると表示されなくなることです。
globalCompositeOperation 'source-in' の下に持つことができる要素の数に制限はありますか、それとも単純なものが不足していますか?
ここにいくつかのフィドルがあります-
http://jsfiddle.net/ENtXs/ - 期待どおりに動作しますが、塗りつぶしスタイルを尊重しません。
http://jsfiddle.net/ENtXs/1/ - マスクを削除してすべての要素を表示する
http://jsfiddle.net/ENtXs/2/ - beginPath() および fill() 要素を追加すると、塗りつぶしスタイルが考慮されます。(マスキングなし)
http://jsfiddle.net/ENtXs/3/ - マスクを追加し直します (もう何も表示されません)
http://jsfiddle.net/ENtXs/4/ - #3 と同じコードの四角形が 1 つだけあれば正しく動作します。