我继承了一个项目,该项目包含带有图形组件的flash影片和带有代码的.as文件。我想改变各种图形元素的外观。
示例:
if (skin="client1")
- >所有按钮都必须为蓝色,if (skin="client2")
- >所有按钮都必须是黄色 - 依此类推。
我被一个按钮困住了:
我尝试并在按钮内嵌套了不同颜色(frame1=blue
,frame5=yellow
)的电影,但我无法找到goToAndStop
电影的方式来自.as文件。
我尝试检查该电影中的变量(if skin="client1" goto frame "blue"
),但我似乎无法访问其他变量,这些变量是在.as文件中定义的。 / p>
答案 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类没有简单的方法来接收它的内容。