0

我在 Adob​​e Flash CS5.5 的图形编辑器中创建了一个名为 customSliderTrack 的皮肤。此滑块现在位于 FLA 文件的“库”中。

我可以使用以下代码应用此皮肤:

var cls:Class = getDefinitionByName("CustomSliderTrack") as Class;
var tmpTrack:Sprite = new cls();
slider.setStyle("sliderTrackSkin",tmpTrack);

然而,由于 FLA 文件的二进制性质和不同版本的 Adob​​e Flash 缺乏兼容性,我需要在 Actionscript 中实现它。

我知道 cls 是一个 MovieClip 对象,但我无法使用new MovieClip(). 我认为这可能与图形编辑器中的虚线有关(我修改了默认的 SliderTrack_skin)。我还没有发现它们的含义以及如何用 Actionscript 代码替换它们。

4

2 回答 2

0

根据您的轨道资产的复杂性,您可以使用绘图 API 完成此操作:http: //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html

一个非常简单的例子是:

var track:Sprite = new Sprite();
track.graphics.lineStyle(2, 0xcccccc);
track.graphics.beginFill(0x000000, 1);
track.graphics.drawRect(0, 0, 400, 20);
track.graphics.endFill();
track.scale9Grid = new Rectangle(2, 2, 396, 16);
slider.setStyle("sliderTrackSkin",track);

这将创建一个只有黑色矩形的轨道,大小为 400x20 像素。您可以在代码中设置scale9grid来控制皮肤的缩放方式。在上面的示例中,矩形的边框不会缩放,但里面的黑色矩形会。试验绘图 API 中的方法可能就是您所需要的。

如果您需要更复杂的资产,我建议您加载图像,然后将其传递给 slider.setStyle。

于 2012-04-18T21:28:03.407 回答
0

setStyle自动设置track.heightand track.width。如果track.heightslider.height属性似乎没有任何效果。要解决此问题,只需将 设置track.height为最佳值。

要访问track扩展 Slider 类并覆盖configUI函数:

public class CustomSlider extends Slider
{
    override protected function configUI():void
    {
        // Call configUI of Slider
        super.configUI();
        // The sprite that will contain the track
        var t:Sprite = new Sprite();
        // Draw the content into the sprite
        t.graphics.beginFill(0x000000, 0.1);
        t.graphics.drawRect(0, -15, width, 30);
        t.graphics.endFill();
        // Set the Sprite to be the one used by the Slider
        this.setStyle("sliderTrackSkin",t);
        // Reset the height to the value that it should be
        track.height = 30;
    }
}
于 2012-04-19T14:23:17.347 回答