#3673 fix nested mask behaviour for Phaser.CANVAS mode

This commit is contained in:
scott.liu 2020-06-17 10:53:38 +08:00
parent 58d40fa9e0
commit f607f1f521
2 changed files with 20 additions and 3 deletions

View file

@ -54,7 +54,12 @@ var ContainerCanvasRenderer = function (renderer, container, interpolationPercen
var alpha = container._alpha;
var scrollFactorX = container.scrollFactorX;
var scrollFactorY = container.scrollFactorY;
var scrollFactorY = container.scrollFactorY;
if (container.mask) {
container.mask.preRenderCanvas(renderer, null, camera);
}
for (var i = 0; i < children.length; i++)
{
@ -85,7 +90,11 @@ var ContainerCanvasRenderer = function (renderer, container, interpolationPercen
// Restore original values
child.setAlpha(childAlpha);
child.setScrollFactor(childScrollFactorX, childScrollFactorY);
}
}
if (container.mask) {
container.mask.postRenderCanvas(renderer);
}
};
module.exports = ContainerCanvasRenderer;

View file

@ -765,10 +765,18 @@ var CanvasRenderer = new Class({
ctx.globalAlpha = alpha;
ctx.imageSmoothingEnabled = !(!this.antialias || frame.source.scaleMode);
ctx.imageSmoothingEnabled = !(!this.antialias || frame.source.scaleMode);
if (sprite.mask) {
sprite.mask.preRenderCanvas(this, sprite, camera);
}
ctx.drawImage(frame.source.image, frameX, frameY, frameWidth, frameHeight, x, y, frameWidth / res, frameHeight / res);
if (sprite.mask) {
sprite.mask.postRenderCanvas(this, sprite, camera);
}
ctx.restore();
},