0

所以我有一个 Tile 类,其中包含一个保存图块图形的精灵变量。在鼠标悬停时,我对图形进行颜色变换。似乎工作正常。在鼠标移出时,我尝试将其更改回来。纳达。事实上,在同一个图块上滚动两次会增加 alpha,直到最终完全消失。不知道如何修复它。这是我的代码。

在瓷砖类中:

this.addEventListener(MouseEvent.MOUSE_OVER, thisMouseOver);
this.addEventListener(MouseEvent.MOUSE_OUT, thisMouseOut );

public function thisMouseOver( e:Event ):void {
    tileGraphic.bitmapData = setAlpha(tileGraphic.bitmapData);
}

public function thisMouseOut( e:Event ):void {
    tileGraphic.bitmapData = resetAlpha(tileGraphic.bitmapData);
}

private function setAlpha( bmd:BitmapData ):BitmapData {
    var rec:Rectangle = new Rectangle( 0, 0, bmd.width, bmd.height );
    var ct:ColorTransform = new ColorTransform();
    ct.alphaMultiplier = .65;
    bmd.colorTransform( rec, ct );
    return bmd;
} //end function setAlpha

private function resetAlpha( bmd:BitmapData ):BitmapData {
    var rec:Rectangle = new Rectangle( 0, 0, bmd.width, bmd.height );
    var ct:ColorTransform = new ColorTransform();
    ct.alphaMultiplier = 1;
    bmd.colorTransform( rec, ct );
    return bmd;
} //end function resetAlpha

谁能指出我正确的方向?谢谢!

4

2 回答 2

1

将 resetAlpha 替换为

    private function resetAlpha( bmd:BitmapData ):BitmapData {
        var rec:Rectangle = new Rectangle( 0, 0, bmd.width, bmd.height );
        var ct:ColorTransform = new ColorTransform();
        ct.alphaOffset = 255
        bmd.colorTransform( rec, ct );
        return bmd;
    } //end function resetAlpha
于 2013-05-07T07:30:56.270 回答
1

您应该更好地更改容器的 alpha 而不是使用BitmapData像素。例如,在您的情况下,如果您的平铺位图最初将具有透明像素(在绘制事物之前用 0x00ff0000 填充它并检查是否如此),它们将因编码佛的答案而变得不透明。因此,将侦听器更改为以下内容:

public function thisMouseOver( e:Event ):void {
    tileGraphic.alpha=0.65;
}

public function thisMouseOut( e:Event ):void {
    tileGraphic.alpha=1;
}
于 2013-05-07T08:14:23.263 回答