Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 BitmapData构造函数默认值似乎冲突_Actionscript 3_Constructor_Bitmapdata - Fatal编程技术网

Actionscript 3 BitmapData构造函数默认值似乎冲突

Actionscript 3 BitmapData构造函数默认值似乎冲突,actionscript-3,constructor,bitmapdata,Actionscript 3,Constructor,Bitmapdata,下面是我在这里给出的答案: 我知道,要获得一个透明的BitmapData对象,必须指定黑色的背景色,但在我被要求使用它之前,我从未费心检查原因。检查过之后,我想知道是否有一个原因我不明白为什么BitmapData构造函数的默认参数看起来有冲突 首先,这里是文档中定义的构造函数: public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF) 请注

下面是我在这里给出的答案:

我知道,要获得一个透明的BitmapData对象,必须指定黑色的背景色,但在我被要求使用它之前,我从未费心检查原因。检查过之后,我想知道是否有一个原因我不明白为什么BitmapData构造函数的默认参数看起来有冲突

首先,这里是文档中定义的构造函数:

public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
请注意,透明度的默认值为true。现在考虑文档关于透明参数的说明:

透明:布尔默认值=真-指定位图图像是否支持每像素透明度。默认值为true transparent。要创建完全透明的位图,请将transparent参数的值设置为true,将fillColor参数的值设置为0x00000000或0。将“透明”属性设置为false可能会导致渲染性能的轻微改进

似乎是说,除非将填充颜色设置为黑色,否则此参数是无用的。那么为什么默认的fillColor值是0xFFFFFFFF呢

我觉得这是不对的。如果开发人员希望获得无alpha通道的性能增益,则必须明确指定:

var bmd:BitmapData = new BitmapData(width,height,false);
var bmd:BitmapData = new BitmapData(width,height,true,0x000000);
如果需要透明的BitmapData,也必须明确指定:

var bmd:BitmapData = new BitmapData(width,height,false);
var bmd:BitmapData = new BitmapData(width,height,true,0x000000);
因此,在任何情况下,我们都不能依赖最短的构造函数形式,而不接受性能的影响,我不明白为什么。当然,fillColor应该默认为黑色:

var bmd:BitmapData = new BitmapData(width,height); // transparent BitmapData
或透明度应默认为false:

var bmd:BitmapData = new BitmapData(width,height); // faster, no-alpha BitmapData

有人能给我解释一下当前构造函数的好处吗?

当前构造函数没有好处-它只是默认的Adobe模式-我假设他们不希望人们抱怨在绘制displayobjects、movieclips等时,位图包含背景。老实说,我认为不违约更有意义,但这正是他们的选择,我们必须遵守

如果您真的想稍微提高速度,但不想指定该构造函数,请创建定义了该构造函数的最终子类:

public final class Surface extends BitmapData {
    public function Surface(width:int, height:int, fillColor:uint = 0x000000):void {
        super(width, height, false, fillColor);
    }    
}