AS3: глобальная переменная типа SimpleButton меняется на DisplayObject по неизвестной причине, не дает мне доступ к .upState.textColor! - PullRequest
0 голосов
/ 29 января 2010

Эта проблема лучше всего объясняется в коде.

Я не понимаю, как 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 сам по себе?

1 Ответ

1 голос
/ 29 января 2010

Все, что извлекается из списка отображения, классифицируется как минимально возможный знаменатель (например, displayObject), так как, хотя SimpleButton является displayObject, не все displayObjects будут SimpleButtons. Вероятно, это и является причиной вашей второй проблемы, только немного отличающейся в исполнении. есть ли прямая ссылка в SimpleButton, в которой говорится, что upState является TextField?

попробуйте отключить строгий режим компиляции и посмотрите, поможет ли это. см. Тип проверки Livedocs для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...