Как я могу надежно зафиксировать разрешение экрана с помощью Actionscript? - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть несколько компонентов, положение экрана которых зависит от разрешения монитора, на котором живет браузер.

loginBox.x = (flash.system.Capabilities.screenResolutionX - loginBox.width) / 2; loginBox.y = (flash.system.Capabilities.screenResolutionY - loginBox.height) / 2;

Проблема, с которой я сталкиваюсь, заключается в том, что метод flash.system.Capabilities определяет разрешение основного монитора, подключенного к компьютеру. В большинстве случаев это не проблема, но на одном из моих компьютеров у меня есть 1680x1050 и 1440x900. На работе у меня есть 1920x1200 и 1680x1050, поэтому, если я открою страницу в браузере на меньшем мониторе, все будет не по центру, и панель инструментов будет полностью смещена вправо от экрана.

У меня есть блок javascript, который я пробовал, как в html, так и через php, но проблема в том, что если я использую httpRequest или urlLoader для захвата html-файла, я получаю источник html, и если я пытаюсь PHP скрипт, я получаю блок скрипта, который пытается записать куки. Если эта страница не была посещена до загрузки флэш-сайта, или если cookie-файлы отключены, она никогда не будет записана, и я нигде.

Есть ли способ, который я могу использовать, который не использует куки-файлы, для определения разрешения монитора, на котором фактически работает браузер, а не только разрешения первого монитора?

Ответы [ 2 ]

1 голос
/ 16 сентября 2009

Почему вы не используете stage.stageWidth и stage.stageHeight для позиционирования?

EDIT: Хорошо, вот пример. Я считаю, что вы поместите этот код в контейнер, где также находится loginBox. Свойство stage не определено до тех пор, пока ваш объект не будет добавлен в DisplayList, поэтому вам нужно прислушиваться к моменту его добавления и затем позиционировать loginBox.

// in the constructor
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

, а затем

private function onAddedToStage(evt:Event) {
    loginBox.x = (stage.stageWidth - loginBox.width)/2;
    loginBox.y = (stage.stageHeight - loginBox.height)/2;
}

Кроме того, если у вас для stageModeMode установлено значение noScale (что, возможно, имеет место), если вам нужно постоянно перемещать loginBox на основе изменения размера браузера, вам необходимо прослушать событие Event.RESIZE

stage.addEventListener(Event.RESIZE, onResize);
0 голосов
/ 16 сентября 2009

Если вы пытаетесь установить связь между flash и javascript, ExternalInterface - это путь. Вместо того, чтобы писать куки, просто возьмите информацию из javascript и отправьте ее на флэш через обратный вызов.

...