0

私はスターリングとフェザースイを使って羽のテーマを機能させようとしています。

アプリの背景色がテーマの色に変わるので(テーマが正しく読み込まれて実行されていることがわかります)、ボタンやその他のコントローラーには何もありません。ボタンは単なる黒のテキストで、ボタンはありません。

package {
import starling.display.Sprite;
import starling.display.Stage;
import starling.display.Image;
import starling.textures.Texture;
import starling.events.Event;
import starling.text.TextField;

import feathers.controls.Button;
import feathers.controls.Callout;
import feathers.controls.Label;
import feathers.controls.TextInput;

import feathers.themes.MetalWorksMobileTheme



public class Game extends Sprite
{




public function Game()
{


    this.addEventListener( Event.ADDED_TO_STAGE, addedToStageHandler );

var stageWidth = 640;
    var stageHeight=960;






var button:Button = new Button();
button.label = "Click Me";

button.x = 200;
button.y = 500;
addChild( button );

}


private function addedToStageHandler( event:Event ):void
{
new feathers.themes.MetalWorksMobileTheme();
}   


}

 }

.source 設定にテーマへのパスを追加しました。

読み込みを妨げている何かが欠けているに違いありません。助けていただければ幸いです。

4

3 に答える 3

0

コンストラクターではなく、Buttonを作成した後に、 を子として追加する必要があります。MetalWorksMobileThemeテーマが作成される前にステージに追加されたコンポーネントは、テーマによってスキンされません。

于 2013-11-25T21:29:44.557 に答える
0

テーマ オブジェクトへのステージ参照が欠落していると思います。テーマが DisplayListWatcher を正しく接続できるように、これを行う必要があります。

テーマのあり方のスニペットを次に示します。

public class Theme extends DisplayListWatcher {

    public function Theme(container:DisplayObjectContainer = null, scaleToDPI:Boolean = true) {

        if (!container) {
            container = Starling.current.stage;
        }
        super(container);
        Starling.current.nativeStage.color = BACKGROUND_COLOR;
        if (root.stage) {
            root.stage.color = BACKGROUND_COLOR;
        } else {
            root.addEventListener(Event.ADDED_TO_STAGE, root_addedToStageHandler);
        }

        _scaleToDPI = scaleToDPI;
        initialize();
    }

protected function initialize():void {
    const scaledDPI:int = DeviceCapabilities.dpi / Starling.contentScaleFactor;
    if (_scaleToDPI) {
        if (DeviceCapabilities.isTablet(Starling.current.nativeStage)) {
            _originalDPI = ORIGINAL_DPI_IPAD_RETINA;
        } else {
            _originalDPI = ORIGINAL_DPI_IPHONE_RETINA;
        }
    } else {
        _originalDPI = scaledDPI;
    }
    scale = scaledDPI / _originalDPI;

    if (DeviceCapabilities.isTablet(Starling.current.nativeStage)) fontSize = 40 * scale;
    else fontSize = 36 * scale;

    // init your texture and stuff

    setInitializerForClass(Button, buttonInitializer); // call your button initializer
}

protected static function buttonInitializer(button:Button):void {
        const skinSelector:Scale9ImageStateValueSelector = new Scale9ImageStateValueSelector();
        skinSelector.defaultValue = buttonUpSkinTextures;
        skinSelector.defaultSelectedValue = buttonDownSkinTextures;
        skinSelector.setValueForState(buttonDownSkinTextures, Button.STATE_DOWN, false);
        skinSelector.setValueForState(buttonDisabledSkinTextures, Button.STATE_DISABLED, false);
        skinSelector.imageProperties = {
            width: 66 * scale,
            height: 66 * scale,
            textureScale: scale
        };
        button.stateToSkinFunction = skinSelector.updateValue;

        button.defaultLabelProperties.textFormat = new TextFormat(FontUtils.getFontName("bold"), fontSize * 0.9, COLOR_WHITE);
        button.defaultSelectedLabelProperties.textFormat = new TextFormat(FontUtils.getFontName("bold"), fontSize * 0.9, COLOR_DARK_GREY);
        button.downLabelProperties.textFormat = new TextFormat(FontUtils.getFontName("bold"), fontSize * 0.9, COLOR_DARK_GREY);

        button.paddingTop = button.paddingBottom = 5 * scale;
        button.paddingLeft = button.paddingRight = 10 * scale;
        button.gap = 12 * scale;
        button.minWidth = button.minHeight = 66 * scale;
        button.minTouchWidth = button.minTouchHeight = 88 * scale;
    }
}
于 2013-10-05T22:56:48.360 に答える