2

グラフィック コンポーネントを含む Flash ムービーと、コードを含む .as ファイルで構成されるプロジェクトを継承しました。さまざまなグラフィック要素の外観を変更したい。

例:

if (skin="client1")-> すべてのボタンは青色でなければならないif (skin="client2")-> すべてのボタンは黄色でなければならない - など。

私はボタンで立ち往生しています:

  1. ボタン内に異なる色 ( frame1=blue、 ) のムービーを入れ子にしようとしましたが、.as ファイルからそのムービーへの道が見つかりません。frame5=yellowgoToAndStop

  2. そのムービー ( ) 内から変数をチェックしようとしましたif skin="client1" goto frame "blue"が、.as ファイル内で定義されている他の変数にアクセスできないようです。

4

3 に答える 3

1

AS3 は完全にオブジェクト指向です。

それらの変数がプライベートまたは保護されている場合、それらにアクセスすることはできません。

于 2012-09-13T13:54:35.367 に答える
1

テーマを管理する 2 つのクラスを作成できます。

最初はテーマ名を管理します

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;
        }
    }
}

2 つ目はアセットを管理します

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")) );

私はそれがあなたのために働くことを願っています:)

于 2012-09-13T15:06:06.987 に答える
0

プロジェクトはあなたのものなので、特定の変更を受け入れるための追加の方法をボタンに提供することができます。 「黒」など、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 クラスにはそのコンテンツを簡単に受け取る方法がないためです。

于 2012-09-13T15:23:06.120 に答える