テーマ オブジェクトへのステージ参照が欠落していると思います。テーマが 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;
}
}