Эта проблема лучше всего объясняется в коде.
Я не понимаю, как active_button.upState
, который, как я знаю, является TextField (см. Операторы трассировки), загадочным образом превращается в DisplayObject при попытке доступа к свойству textColor
.
Я включил сообщения об ошибках ниже для справки.
Кроме того, почему, когда у меня есть объект, который я знаю, это SimpleButton (опять же, смотрите следы), мне нужно привести его к SimpleButton, чтобы сохранить его в переменной? Это не имеет никакого смысла для меня.
Вся помощь очень ценится. Спасибо.
public class Menu extends MovieClip
{
private var active_button:SimpleButton;
public function Menu()
{
// menu_list is a collection of SimpleButtons, I make the first one the 'active_button' and give each a MOUSE_DOWN event listener.
trace( menu_list.getChildAt( 0 )); // writes [object SimpleButton]
active_button = SimpleButton( menu_list.getChildAt( 0 )); // Cast is required here. Otherwise throws Error 1118. Strange. Why is that?
for( var i:Number = 0; i < menu_list.numChildren; i++ )
{
menu_list.getChildAt( i ).addEventListener( MouseEvent.MOUSE_DOWN, menuClick );
}
}
private function menuClick( e:Event ) : void
{
trace( e.target ); // writes [object SimpleButton]
active_button = SimpleButton( e.target ); // Cast is required here. Otherwise throws Error 1118. Still Strange.
trace( active_button ); // writes [object SimpleButton]. Normal.
trace( active_button.upState ); // writes [object TextField]. Normal.
active_button.upState.textColor = 0xAAAAAA; // Throws Error 1119. WTF?! textColor is a perfectly valid property of active_button.upState. Why is it suddenly type DisplayObject?
}
}
ОШИБКА:
1118: неявное приведение значения со статическим типом flash.display: DisplayObject к возможному несвязанному типу flash.display: SimpleButton.
1119: доступ к возможно неопределенному свойству textColor через ссылку со статическим типом flash.display: DisplayObject
РЕДАКТИРОВАТЬ: я немного сжал свой вопрос и опубликовал как AS3: почему тип данных автоматически меняется с TextField на DisplayObject сам по себе?