【问题标题】:OpenFL - can someone explain __combinedVisible property of flash.display.BitmapOpenFL - 有人可以解释 flash.display.Bitmap 的 __combinedVisible 属性吗
【发布时间】:2026-01-16 16:35:01
【问题描述】:

我在 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 后立即这样做,它仍然需要这个。

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

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

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

【问题讨论】:

  • OpenFL 没有__combinedVisible 属性,甚至私下也没有。您可以向community.openfl.org 发帖说明您使用的版本信息吗?
  • 它是我们坚持使用的旧版本。我在文档中没有看到任何关于它的内容,但该属性在控制台中。版本 = 1.4.0

标签: html haxe openfl


【解决方案1】:

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

这里有一个错误,如果在将位图绘制到画布之前将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"));
    }
}

【讨论】:

    最近更新 更多