0

我刚刚开始使用starling 和feathersui,试图让羽毛主题发挥作用。

我已经设法得到它,因此应用程序的背景颜色更改为主题颜色(所以我知道主题正在加载并正确运行)但按钮或我尝试过的任何其他控制器上没有任何内容。该按钮只是纯黑色文本,没有按钮。

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

我有同样的问题,我花了一些时间来解决这个问题,但如果你仔细想想,这并不难。

您需要做的就是将主题目录添加到starling 文件夹中。

因此,如果您有此文件夹设置:

下载/feathers-1.1.1/文档

下载/feathers-1.1.1/examples

...

下载/feathers-1.1.1/source

下载/feathers-1.1.1/swc

下载/feathers-1.1.1/themes

首先,您必须将源文件夹添加到您的 ActionScript 构建路径。然后去

下载/feathers-1.1.1/themes/MetalWorksMobileTheme/source/feathers/themes

并将该文件夹复制到此位置

下载/feathers-1.1.1/source/feathers

新主题现在将位于正确的文件夹中,并且 Flash Builder 将知道在哪里可以找到它。

执行此操作后,您可能会收到一些错误,因为主题引用了一些未找到的资产(字体和图像)。你会在这里找到那些:

下载/feathers-1.1.1/themes/MetalWorksMobileTheme/assets

将该文件夹复制到您的项目位置或仅编辑主题文件中的路径,从那里开始一切都应该没问题。

另外我认为您应该在 ADDED_TO_STAGE 事件处理程序中添加所有按钮创建代码,如下所示:

public function Game()
{
    this.addEventListener( Event.ADDED_TO_STAGE, addedToStageHandler );

    var stageWidth  : int = 640;
    var stageHeight : int = 960;
}


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

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

    button.x = 200;
    button.y = 500;

    addChild( button );
} 

希望这可以帮助

于 2013-11-18T08:21:46.190 回答
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 回答