OpenFL - 有人可以解释 __combinedVisible 属性 of flash.display.Bitmap

OpenFL - can someone explain __combinedVisible property of flash.display.Bitmap

我在 OpenFL 中使用位图作为按钮。当我设置 myBitmap.visible = true 时,我看到的是位图不可见。

看来我还需要调用 myBitmap.__CombinedVisible = true 才能绘制它。我找不到有关此 属性 如何正确使用它的任何文档。

我还注意到我第一次在 2 个位图之间切换时,可见的位图不会立即出现,但不可见的位图会立即消失。之后的任何时候它都会正常运行并且会立即发生切换。

这会不会和__CombinedVisible有关?

您可以在我的按钮内部看到下面的位图切换代码。

private function update() : Void {
    if( state == ButtonState.OVER ){
        this.over.visible = this.over.__combinedVisible = true;
        this.up.visible = this.down.visible = false;
    }else if( state == ButtonState.UP ){
        this.up.visible = this.up.__combinedVisible = true;
        this.down.visible = this.over.visible = false;
    } else if( state == ButtonState.DOWN ){
        this.down.visible = this.down.__combinedVisible = true;
        this.up.visible = this.over.visible = false;
    }else if( state == ButtonState.CLICK ) {
        this.up.visible = this.up.__combinedVisible = true;
        this.over.visible = this.down.visible = false;
        this.enabled = false;
        dispatchEvent(new Event("CLICK")); 
    }
}

所以经过一系列测试后,我将范围缩小到:如果我在分配 BitmapData 之前将 visible 设置为 false,则此 __combinedVisible 成员似乎需要使用。如果我在设置 BitmapData 后立即执行它,它仍然需要这个。

如果我让位图绘制 1 帧,则将 visible 设置为 falsevisible = true 发生这种情况后工作,我现在可以看到位图。

但如果它不绘制一次,那么 visible = true 不会显示位图。

我不能用这种方式创建一个空位图,然后再分配 BitmapData 吗?它在向上状态下工作,因为我在第一次绘制之前从未设置 visible = false

好吧,经过大量测试并试图让它发挥作用,它就是行不通。

这里有一个错误,如果在将位图绘制到 canvas 之前将 visible 设置为 false,则在设置 __combinedVisible 之前不会绘制它至 true。这也是第一次画位图时总是闪退,所以不能用。

我去用了 alpha 而不是 visible。这按预期正常工作。

如果有人可以使用 visible 我会接受这个答案。

private function update() : Void {
    if( state == ButtonState.OVER ){
        this.over.alpha = 1;
        this.up.alpha = this.down.alpha  = 0;
    }else if( state == ButtonState.UP ){
        this.up.alpha = 1;
        this.down.alpha = this.over.alpha = 0;
    } else if( state == ButtonState.DOWN ){
        this.down.alpha = 1;
        this.up.alpha = this.over.alpha = 0;
    }else if( state == ButtonState.CLICK ) {
        this.up.alpha = 1;
        this.over.alpha = this.down.alpha = 0;
        this.enabled = false;
        dispatchEvent(new Event("CLICK"));
    }
}