【问题标题】:How to Snap linestyle in Actionscript 3.0?如何在 Actionscript 3.0 中捕捉线型?
【发布时间】:2011-04-11 03:23:58
【问题描述】:

嘿,我是 actionscript 的新手。

我正在尝试在 actionscript 3 中制作一个画笔工具,孩子们可以在其中使用画笔在圆圈内绘制颜色。我已经使用线条样式实现了这一点。现在我希望画笔在孩子即将完成时(比如当他们完成绘画完成 95% 时)来捕捉颜色。我怎么知道孩子在圆圈上画了多少?

谢谢

【问题讨论】:

    标签: actionscript-3 bitmap brush linestyle snapping


    【解决方案1】:

    我怎么知道孩子有多少 画在圆圈上?

    你可以:

    • 将你的圆圈和其他形状的 Sprite 制作成单独的容器
    • 将它们渲染成位图并计算其中不透明像素的数量(您应该知道什么数字对应于 100%)
    • 由于计算像素是一项繁重的操作(可能需要数百毫秒,具体取决于形状大小),因此您不想在每一帧上都运行它。我建议在孩子完成下一次划水后立即在 MOUSE_UP 上执行此操作。

    如何计算像素:

    function countPixels(shape:DisplayObject):int
    {
        var bd:BitmapData = new BitmapData(shape.width, shape.height);
        bd.draw(shape);
    
        //here you get sequence of ARGB-packed colors in vector
        var pixels:Vector.<uint> = bd.getVector(bd.rect);
    
        //AFAIK, fastest method to traverse vector is 'for' loop
        var pixel:uint;
        var filledCount:int = 0;
        for (var i:int = pixels.length - 1; i >= 0; i--)
        {
            pixel = pixels[i];
            //pixel is 32-bit ARGB color value, test upper 8 bits (alpha):
            if ((pixel >> 24) > 0) filledCount++;
        }
        return filledCount;
    }
    

    在填充的形状上运行此命令以获得要比较的总像素数。
    pixelCount 达到 95% 后,即可清除孩子的绘画并显示填充形状。

    【讨论】:

    • 嘿,这个工作起来了……我面临的另一个问题是“孩子可以用不同的颜色重新粉刷”。所以我使用 getpixel() 来获取像素颜色并计算它。现在它工作得很好:)感谢您的回复:)
    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    相关资源
    最近更新 更多