Здравствуйте
Подскажите, пожалуйста, где я ошибся
Вот этот код работает верно
var buttonStyle:StyleVO = new StyleVO();
buttonStyle.className = "button";
buttonStyle.skinClassAlias = "dev.div0.components.skins.ButtonSkin"; // thats OK
buttonStyle.skinClass = Type.createInstance(Type.resolveClass(buttonStyle.skinClassAlias), []);
Но если я подставлю другой класс (это точная копия предидущего, но с другой графикой) в resolveClass, то этот resolveClass отдает null
var buttonStyle:StyleVO = new StyleVO();
buttonStyle.className = "button";
buttonStyle.skinClassAlias = "dev.div0.customSkins.MyButtonSkin"; // thats OK
buttonStyle.skinClass = Type.createInstance(Type.resolveClass(buttonStyle.skinClassAlias), []);
Код работающего скина
-------------------------------------
package dev.div0.components.skins;
import dev.div0.components.ButtonBase;
import dev.div0.components.UIComponent;
import dev.div0.interfaces.IHostComponentChild;
import nme.display.Sprite;
import nme.events.Event;
import nme.display.Bitmap;
import nme.Assets;
import nme.events.MouseEvent;
import nme.text.Font;
import nme.text.TextField;
import nme.text.TextFieldAutoSize;
import nme.text.TextFormat;
import nme.text.TextFormatAlign;
import dev.div0.interfaces.IHostComponentChild;
/**
* ...
* @author divisionby0
*/
/** default button skin **/
class ButtonSkin extends UIComponent, implements IHostComponentChild
{
private var normalStateBitmap:Bitmap;
private var downStateBitmap:Bitmap;
public var hostComponent(getHostComponent, setHostComponent):UIComponent;
private var _hostComponent:UIComponent;
private var _textField:TextField;
private var _textFormat:TextFormat;
private var font:Font;
private var tfContainer:Sprite;
public function new()
{
super();
_textField = new TextField();
_textField.selectable = false;
_textField.autoSize = TextFieldAutoSize.LEFT;
//_textField.border = true;
_textFormat = new TextFormat();
}
override private function init(event:Event):Void
{
normalStateBitmap = new Bitmap(Assets.getBitmapData("assets/img/NormalState.png",true));
downStateBitmap = new Bitmap(Assets.getBitmapData("assets/img/DownState.png",true));
addChild(normalStateBitmap);
addChild(downStateBitmap);
downStateBitmap.alpha = 0;
tfContainer = new Sprite();
if (!contains(tfContainer))
{
addChild(tfContainer);
}
if (!tfContainer.contains(_textField))
{
tfContainer.addChild(_textField);
}
var hostComponent:ButtonBase = cast(_hostComponent, ButtonBase);
trace("label=" + hostComponent.label);
if (Std.string(hostComponent.label) != "null")
{
trace("tf container=" + tfContainer);
#if android
_textFormat = new TextFormat("assets_fonts_aricyr_ttf", 20, 0x000000);
#else
_textFormat = new TextFormat("assets/fonts/aricyr.ttf", 20, 0x000000);
#end
//_textFormat.align = TextFormatAlign.CENTER;
//_textField.defaultTextFormat = _textFormat;
_textField.text = hostComponent.label;
_textField.x = (width - _textField.width) / 2;
_textField.y = (height - _textField.height) / 2;
}
else
{
trace("No label for button");
}
addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler);
super.init(event);
}
// host component getter/setter
public function getHostComponent():UIComponent
{
return _hostComponent;
}
public function setHostComponent(value:UIComponent):UIComponent
{
_hostComponent = value;
return _hostComponent;
}
private function removedFromStageHandler(event:Event):Void
{
removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
trace("BUTTON SKIN removed from stage");
}
private function mouseDownHandler(event:MouseEvent):Void
{
downStateBitmap.alpha = 1;
}
private function stageMouseUpHandler(event:MouseEvent):Void
{
downStateBitmap.alpha = 0;
}
}
Код неработающего скина
---------------------------------
package dev.div0.customSkins;
import dev.div0.components.ButtonBase;
import dev.div0.components.UIComponent;
import dev.div0.interfaces.IHostComponentChild;
import nme.display.Sprite;
import nme.events.Event;
import nme.display.Bitmap;
import nme.Assets;
import nme.events.MouseEvent;
import nme.text.Font;
import nme.text.TextField;
import nme.text.TextFieldAutoSize;
import nme.text.TextFormat;
import nme.text.TextFormatAlign;
import dev.div0.interfaces.IHostComponentChild;
/**
* ...
* @author divisionby0
*/
/** custom button skin **/
class MyButtonSkin extends UIComponent, implements IHostComponentChild
{
private var normalStateBitmap:Bitmap;
private var downStateBitmap:Bitmap;
public var hostComponent(getHostComponent, setHostComponent):UIComponent;
private var _hostComponent:UIComponent;
private var _textField:TextField;
private var _textFormat:TextFormat;
private var font:Font;
private var tfContainer:Sprite;
public function new()
{
super();
}
override private function init(event:Event):Void
{
normalStateBitmap = new Bitmap(Assets.getBitmapData("assets/img/CustomButtonNormalState.png",true));
downStateBitmap = new Bitmap(Assets.getBitmapData("assets/img/CustomButtonNormalState.png",true));
addChild(normalStateBitmap);
addChild(downStateBitmap);
downStateBitmap.alpha = 0;
addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler);
super.init(event);
}
// host component getter/setter
public function getHostComponent():UIComponent
{
return _hostComponent;
}
public function setHostComponent(value:UIComponent):UIComponent
{
_hostComponent = value;
return _hostComponent;
}
private function removedFromStageHandler(event:Event):Void
{
removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
trace("BUTTON SKIN removed from stage");
}
private function mouseDownHandler(event:MouseEvent):Void
{
downStateBitmap.alpha = 1;
}
private function stageMouseUpHandler(event:MouseEvent):Void
{
downStateBitmap.alpha = 0;
}
}