stantler |
22.09.2011 15:42 |
Расширение класса кнопки
Здравствуйте. Я работаю со scaleform, в нем стандартный класс кнопки уже расширен. Но мне нужно расширить и его еще (изменять нельзя ибо используется еще много где), чтобы добавить свойств и стилей кнопке. Кому интересно - линк, вторая вкладка.
Получается такой вариант: FlashButton <+ ScaleformButton <+ MyButton
В общем там есть свойство selected и приватный массив префиксов для приватного класса setState.
Т.е. setSate вызывается при событиях up\down\release\out и т.д.
Выглядит все так:
Код AS1/AS2:
/**
* Set the current visible state. The state is determined by getting a list of possible frame names based on the state, and applying a possible prefixes depending on the button state (eg, selected). Flash and GFx will go to the last existing frame called, so we can use "fall-back" frames.
* @param state The name of the new state
* @see #getStatePrefixes
* @see #stateMap
*/
private function setState(state:String):Void {
this.state = state;
var prefixes:Array = getStatePrefixes();
var states:Array = stateMap[state];
if (states == null || states.length == 0) { return; }
do {
var prefix:String = prefixes.pop().toString();
for (var i:Number=states.length-1; i>=0; i--) {
gotoAndPlay(prefix+states[i]);
}
} while (prefixes.length > 0);
updateAfterStateChange();
}
/**
* Get a list of frame label prefixes for state management. Prefixes are applied in the setState method.
* @see #setState
*/
private function getStatePrefixes():Array {
return (_selected) ? ["selected_",""] : [""];
}
А в кнопке стили заданы уже как "out\up...", "selected_out\up...".
Отсюда вопрос: как мне лучше переопределить функцию getStatePrefixes?
Вариант:
Код AS1/AS2:
private override function getStatePrefixes():Array {
if (_notice) return ["notice_",""];
else return super.getStatePrefixes();
}
Но встает вопрос, будет ли класс setState из ScaleformButton сначала обращаться к моему getStatePrefixes(), после чего уже к Scaleform'овскому?
|