Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3 BitmapData fillRect的透明度未按预期工作_Actionscript 3_Alpha_Bitmapdata_Argb - Fatal编程技术网

Actionscript 3 AS3 BitmapData fillRect的透明度未按预期工作

Actionscript 3 AS3 BitmapData fillRect的透明度未按预期工作,actionscript-3,alpha,bitmapdata,argb,Actionscript 3,Alpha,Bitmapdata,Argb,我尝试在32位位图数据上使用一些FillRect(即透明度=true,bg颜色设置为FFFF00FF(不透明品红色)。例如,我使用: fillRect(rect, 0xFF0000FF); 这将像预期的那样绘制一个不透明的蓝色矩形,但是 fillRect(rect, 0x550000FF); 这应该画一个半透明的蓝色矩形,对吗?但是我得到的是一个深蓝色矩形,好像蓝色和黑色混合在一起(但是背景是品红,记住,所以我希望蓝色和下面的品红混合在一起?) 如果我将颜色值设置为0x000000FF,它将

我尝试在32位位图数据上使用一些FillRect(即透明度=true,bg颜色设置为FFFF00FF(不透明品红色)。例如,我使用:

fillRect(rect, 0xFF0000FF);
这将像预期的那样绘制一个不透明的蓝色矩形,但是

fillRect(rect, 0x550000FF);
这应该画一个半透明的蓝色矩形,对吗?但是我得到的是一个深蓝色矩形,好像蓝色和黑色混合在一起(但是背景是品红,记住,所以我希望蓝色和下面的品红混合在一起?)

如果我将颜色值设置为0x000000FF,它将为我提供100%的基本品红,但我得到100%的黑色

BitmapData是用32位ARGB创建的,所以我想知道这里出了什么问题

似乎这是默认的AS3行为?创建一个小测试类后,它的行为确实如我所解释的那样

package 
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.geom.Rectangle;


    public class Main extends Sprite
    {
        public function Main()
        {
            stage.color = 0x000000;
            var bd:BitmapData = new BitmapData(400, 300, true, 0xFFFF00FF);
            var b:Bitmap = new Bitmap(bd);
            addChild(b);

            bd.fillRect(new Rectangle(0, 0, 200, 200), 0x000000FF);
        }
    }
}
你可能认为用fillRect绘制的矩形是洋红色的,但它显然采用舞台的背景色。现在我的问题是:


有没有办法获得想要的效果(fillRect alpha应用于位图数据的bg颜色,而不是Flash阶段)?

你的问题在于假设fillRect就像photoshop中的一个工具,你可以在其中绘制半透明矩形,它会自动混合

事实并非如此,fillRect只是将指定矩形区域的所有位图像素设置为给定颜色

您需要做的是创建具有所需大小和颜色的半透明位图,然后使用例如draw方法与工作位图(画布)合并,如本简化示例所示:

var whiteTransparent:BitmapData = new BitmapData(100, 100, true, 0x80FFffFF);
var blackCanvas:BitmapData = new BitmapData(400, 400, false, 0);

var canvas:Bitmap = new Bitmap(blackCanvas);

addChild(canvas);

blackCanvas.draw(whiteTransparent);

致以最诚挚的问候

p.s.draw方法有更多的选项可供使用:)但这是一个非常简单的示例,说明了您需要做的事情感谢提示!是的,画图法可以做得更多,但速度也慢得多。由于这段代码用于快速滚动游戏,所以我不希望使用draw()。最好使用copyPixels()而不是draw(),因为它要快得多。