Flash: Stage.FullscreenInteractive -> Разница, если класс или 1-й кадр

пример 1: 1-й кадр моего приложения

    var screenBounds = Screen.mainScreen.bounds; //Bounds of current screen
    var full:Sprite = new Sprite(); //Sprite Fullscreen
    //Enter Fullscreen 
function goFullScreen(e:Event = null) {
    //myClass.goFullscreen();
    full.graphics.clear();
    full.graphics.beginFill(0xccff00);
    full.graphics.drawRect(0,0,screenBounds.width, screenBounds.height);
    full.graphics.endFill();
    addChild(full);
    this.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
}  

пример 2: обычный пакет as class

    private var full:Sprite = new Sprite(); //Sprite to show fullscreen        
    private var screenBounds = Screen.mainScreen.bounds; //Bounds of current screen
public function favoritesFullscreen():void {
    full.graphics.clear();
    full.graphics.beginFill(0xccff00);
    full.graphics.drawRect(0,0,screenBounds.width, screenBounds.height);
    full.graphics.endFill();
    addChild(full);
    this.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
}  

Итак, скажите мне, ГДЕ РАЗНИЦА? Я macuser, вы знаете, вверху меню, а в моем случае док-станция выровнена по левому краю

Это странно, но пример 1 делает именно то, что должен. Он создает полноэкранный прямоугольник на ВСЕМ экране (от 0,0 до правого нижнего края)

Тем не менее, пример 2 как бы вычисляет ширину верхней панели меню и док-станции и запускает полноэкранный прямоугольник примерно в 40 пикселях от левого края экрана (док-станция) и 20 пикселях сверху (панель меню)... я не понять, почему внешний класс действует иначе, чем в первом кадре.

??? спасибо за помощь!


person matt    schedule 05.01.2010    source источник


Ответы (1)


Я предполагаю, что это связано с получением Screen.mainScreen.bounds. Во время компиляции flash внутренне перемещает весь код кадра внутри функций класса DocumentClass и вызывает их после полной инициализации этапа. Итак, в 1-м примере вы получаете screenBounds после того, как все инициализировано, а во 2-м примере вы делаете это намного раньше.

Я предполагаю, что ожидания события ADDED_TO_STAGE будет достаточно. Если это не так, первое отправленное событие ENTER_FRAME определенно должно сработать.

person Cay    schedule 06.01.2010
comment
Спасибо, однако я понятия не имею, как и где я должен установить это событие add_to_stage. Я попытался сделать это с тайм-аутом, поэтому границы экрана устанавливаются через 5 секунд. Однако и это не работает! Левое и верхнее смещение всегда есть, если я вызываю полноэкранную функцию из класса. приватная переменная screenBounds; //Границы текущего экрана private function setScreen() { setTimeout(function(){ screenBounds = Screen.mainScreen.bounds; },5000);‹\br› } - person matt; 06.01.2010
comment
тогда это может быть свойство stage.align? он должен быть установлен на TL в начале вашего приложения... - person Cay; 06.01.2010