easeljs/createjs 如何检测 AlphaMaskFilter 是否完全消失

How to detect that the AlphaMaskFilter is completely gone in easeljs/createjs

我正在根据 AlphaMaskFilter 示例做一个 scratch/reveal 小游戏: http://createjs.com/demos/easeljs/AlphaMaskReveal.html

我想检测面具是否完全消失,或者使用阈值(例如 90% 被划伤)。

我阅读了有关 AlphaMaskFilter、形状和图形对象的文档,但我不太确定如何实现。

我什至不确定我是否可以访问像素信息并检查 alpha 通道来检测它,但即便如此,我想知道我是否会出现性能问题。

欢迎任何帮助,谢谢。

**** 编辑 **** 添加到已接受的答案中 ****

因此,我能够使用 AlphaMapFilter 获得透明度百分比(感谢 Lanny)。 AlphaMapFilter 为您提供到所有像素的 alpha 通道的映射。 这是对我有用的一些示例代码:

        // mShapeToScratch is a createjs Shape. like in the http://createjs.com/demos/easeljs/AlphaMaskReveal.html example
        var alphaMaskFilter = new createjs.AlphaMapFilter(mShapeToScratch.cacheCanvas);
        var canvas = alphaMaskFilter.alphaMap;
        var ctx = canvas.getContext("2d");
        var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
        var alphaData = imgData.data;
        var pixelTotal = rect.h*rect.w;
        var transparentPixel = 0;

        // rect.h is the height of the image and rect.w is the width not shown in the example
        for (var y = 0; y < rect.h; ++y)
        {
          for (var x=0; x < rect.w; ++x)
          {
            var pixelIdx = (y*rect.w + x);

            if(alphaData[pixelIdx] > 128) // transparent will be 255.
            {
                transparentPixel++;
            }
        }

        console.log("transparent % = " + transparentPixel/pixelTotal);

此示例检查所有像素,但按照 Lanny 的建议,每 X 个像素检查一个像素以加快检查速度非常容易。

alpha 蒙版使用 canvas 复合操作,而不是像素访问,因此如果没有一些完全自定义的方法,就没有很好的方法来执行此操作。

迭代像素(以 AlphaMapFilter 为例)可以工作 - 但可能相当慢。也许每 4 个、第 10 个或第 25 个像素检查一次会加快速度。

干杯。