AS3 /更改按钮的外观

时间:2012-09-13 13:48:16

标签: actionscript-3

我继承了一个项目,该项目包含带有图形组件的flash影片和带有代码的.as文件。我想改变各种图形元素的外观。

示例:

if (skin="client1") - >所有按钮都必须为蓝色,if (skin="client2") - >所有按钮都必须是黄色 - 依此类推。

我被一个按钮困住了:

  1. 我尝试并在按钮内嵌套了不同颜色(frame1=blueframe5=yellow)的电影,但我无法找到goToAndStop电影的方式来自.as文件。

  2. 我尝试检查该电影中的变量(if skin="client1" goto frame "blue"),但我似乎无法访问其他变量,这些变量是在.as文件中定义的。 / p>

3 个答案:

答案 0 :(得分:1)

AS3完全是面向对象的。

如果这些变量是私有或受保护的,则无法访问它们。

答案 1 :(得分:1)

您可以创建两个类来管理主题:

第一个管理主题名称

package 
{   
    public class Styles
    {
        public static const DARK:String = "dark";
        public static const LIGHT:String = "light";
        public static var currentStyleName:String = "dark";

        public static function setStyles(styleName:String):void
        {
            currentStyleName = styleName;
        }
    }
}

第二个管理资产

package
{
    import flash.events.EventDispatcher;    
    import flash.display.*;
    import flash.utils.getDefinitionByName;
    import Styles;

    public class Assets extends EventDispatcher
    {

        public static function setStyles(styleName:String):void
        {
            currentStyleName = styleName;
        }

        public static function getClass(name:String):Class
        {
            var TheClass:Class = getDefinitionByName(name) as Class;

            return TheClass;
        }

        public static function sprite(name:String):Sprite
        {
            return new (getClass(name)) as Sprite;
        }

        public static function simpleButton(name:String):SimpleButton
        {
            return new (getClass(name)) as SimpleButton;
        }

        public static function styledName(name:String):String
        {
            return name + Styles.currentStyleName.replace(/^\w/, function(firstChar) {
                return firstChar.toUpperCase();
            });
        }

    }
}

在Flash库中,您需要为每个符号设置链接名称,如下所示:

myButtonDark
myButtonLight
mySpriteDark
mySpriteLight

现在您必须设置当前样式名称

Styles.setStyles(Styles.LIGHT);

最后,您可以创建所需的实例

// All the instances created here belong to the Light theme
addChild( Assets.simpleButton(Assets.styledName("myButton")) );
addChild( Assets.sprite(Assets.styledName("mySprite")) );

// Changes the theme to dark
Styles.setStyles(Styles.DARK);

// All the instances created here belong to the Dark theme
addChild( Assets.simpleButton(Assets.styledName("myButton")) );
addChild( Assets.sprite(Assets.styledName("mySprite")) );

我希望它适合你:)

答案 2 :(得分:0)

由于项目属于您的项目,您可以为按钮提供一种额外的方法来接受某个更改,例如,如果您的嵌套影片剪辑有多个带标签的框架,并且您将它们安排为“蓝色”,“绿色','黑色'等等,您可以创建一组String类型的皮肤常量,如Alexander Ruiz建议的那样,它也可以作为MC切换显示帧的标签。因此,您在按钮类中创建了一个函数,即使它是私有的,它也可以到达您的嵌套影片剪辑,如下所示:

public function AcceptSkin(skin:String):void {
    try {
        nestedMC.gotoAndStop(skin);
    }
    catch(e:Error) {
        trace('Error applying style',skin,e.toString());
    }
}

你可以用这种方法做更多的事情。 现在,当你想让你的所有按钮变黄时,你的MC中有一个标有“黄色”标记的框架(据说该按钮的外观呈黄色),你可以为每个按钮调用theButton.AcceptSkin('yellow');。但是如果你在按钮的基类中使用SimpleButton类,我建议你为按钮创建自己的类,因为SimpleButton类没有简单的方法来接收它的内容。