Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Логическая задача с масштабированием (http://www.flasher.ru/forum/showthread.php?t=124195)

Shinoby 23.04.2009 14:18

Логическая задача с масштабированием
 
1) Флеш ролик имеет размер рабочей области 1024х768
2) В HTML ему задан размер 100%х100% (тобиш он имеет размер рабочей области браузера)
3) С помощью JS ему передаются значения Width и Height рабочей области браузера
4) Ролик загружает картинки размер которых мне известен - по завершении загрузки, так как я получаю их из _width и _height того MovieClipа в который гружу картинку. И размер получаю верный.
5) Ширина картинки (МувиКлипа) всегда привязывается к максимальной ширине ролика - 1024.

Вопрос: Как мне при разных размерах\пропорциях рабочей области браузера, мне установить высоту картинки в правильных пропорциях относительно ширины рабочей области браузера.

Все вводные есть. Не могу за много часов найти решение.
Для простоты понимания я делаю следующее: мой флеш грузит некую картинку которая всегда больше по высоте чем по ширине. Ее можно скролить мышкой вверх и вниз, а в стороны она всегда равна ширине флешки, в свое время флешка равна 100% высоты и ширины рабочей области браузера. Я имею в флешке переменные с этой рабочей областью.

dimarik 23.04.2009 16:18

Что такое "правильных пропорциях относительно ширины рабочей области браузера"?
Чем определяется правильность?

А в общем случае, чтобы сохранялись пропорции контента при масштабировании достаточно обе оси скалить одинаково
mc._xscale = mc._yscale = N;

fljot 23.04.2009 16:18

что-то вы заморочились с js.. если флеш растягивается и занимается 100% области, то его размеры можно узнать через Stage.width, Stage.height

почитайте про "резиновый флеш", научитесь слушать изменения размеров сцены, а дальше будет элементарная арифметика

ps: по аватарке не видно.. вы случайте не also know as Warlord?

Shinoby 23.04.2009 16:24

Цитата:

Сообщение от dimarik (Сообщение 814940)
Что такое "правильных пропорциях относительно ширины рабочей области браузера"?
Чем определяется правильность?

А в общем случае, чтобы сохранялись пропорции контента при масштабировании достаточно обе оси скалить одинаково
mc._xscale = mc._yscale = N;

Внутри флешки скалить да... проблем нет. Но флешка то имеет процентный размер и растягивается с браузером... Внутри флешки чёткие координаты и размеры 1024х768 например. Ширина картинки подгоняется до ширины ролика - 1024. А вот высота картинки должна быть пропорциональна ширине и при этом учитывать то, на сколько ролик был "сплющен" или "растянут" вместе с рабочей областью браузера. То есть например сделав окно браузера растянутым в ширину и сильно сжатым по высоте, я должен увидеть картинку занимающую по ширине все окно браузера, и при этом по вертикали верно смасштабированную, а уж сколько там ее придётся в этом узеньком оконце прокручивать вниз или вверх иное дело...

Добавлено через 2 минуты
Цитата:

Сообщение от fljot (Сообщение 814941)
что-то вы заморочились с js.. если флеш растягивается и занимается 100% области, то его размеры можно узнать через Stage.width, Stage.height

почитайте про "резиновый флеш", научитесь слушать изменения размеров сцены, а дальше будет элементарная арифметика

ps: по аватарке не видно.. вы случайте не also know as Warlord?

Попробую задействовать "Stage". до этого просто не имел дела с ними. Но в итоге видимо всеравно приду к тому, что нажно будет найти зависимость "внутреннего" размера ролика (заданного при разработке), и его физического размера объекта в браузере (неважно как я получу размер объекта через Stage или Явой).

P.S. Я есмъ

fljot 23.04.2009 16:29

Варыч, а не легче поставить Stage.scaleMode = "noScale" ?)

Shinoby 23.04.2009 16:33

Не. похоже не совсем то со Stage. Это я получаю рабочую область внутри ролика. Его я и так знаю. Он 1024х768. Но если его растянуть в браузере то он может быть иным, а Stage всегда вернет 1024х768. например в FireFox у меня сейчас рабочая область явой выводится как 1264х823, отресайзь я картинку на основании Stage, я получу ее более сплюснутой по вертикали, так как пропорции по высоте иные, ибо в браузере сверху куча обвесок в виде панелей.

Добавлено через 2 минуты
1)fljot - Хм... Ты хто таки? %)
2) Задача в том, что бы картинка отображалась максимально большого размера, тоесть под ширину экрана максимально приближено, при этом сохраняла пропорции независимо от попорций окна браузера.

На Stage.scaleMode = "noScale" натыкался при поиске... думал что не совсем это то что надо. Но щас попробую.

P.S.

Ну да. Мне то не нужно запрещать масштабирование. Мне нужно к нему превязаться...

Нужно зная размеры рабочей области браузера, загрузить картинку, задать ей внутри флешки ширину 1024, а высоту как то вычислить так, что бы растянутая или сплюснутая флешка вывела картинку пропорционально. Пол дня с 2мя программерами еще бьюсь, задача левая, но принцип отказаться не дает.

Все данные на руках. Есть внешние габариты обхекта флеша, есть внутринние (те что при разработке заданы), есть размеры картинки после ее загрузки. Есть размер картинки по ширине - который должен быть равен 100% ширине флешки (в моем случае 1024). Уже и не знаю как описать эту задачу %) Проблема в том, что никакой связи между внешними габаритами и внутренними размерами объектов во флеше нет :)

fljot 23.04.2009 16:43

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

RGP. flux.

dimarik 23.04.2009 16:44

Я вас понял. Нужно рассчитывать каждый скейл для того, чтобы картинка сохраняла оригинальный размер и пропорции. Итак, размер флеш-ролика Вам известен из js. Решаем пропорцию.

pic._xscale = flash_width * 100 / 1024;
pic._yscale = flash_height * 100 / 768;

как вариант при Stage.scaleMode != "noScale":

pic._xscale = flash_width / Stage._width * 100;
pic._yscale = flash_height / Stage._height * 100;

Shinoby 23.04.2009 16:48

Цитата:

Сообщение от dimarik (Сообщение 814951)
Я вас понял. Нужно рассчитывать каждый скейл для того, чтобы картинка сохраняла оригинальный размер и пропорции. Итак, размер флеш-ролика Вам известен из js. Решаем пропорцию.

pic._xscale = flash_width * 100 / 1024;
pic._yscale = flash_height * 100 / 768;

как вариант при Stage.scaleMode != "noScale":

pic._xscale = flash_width / Stage._width * 100;
pic._yscale = flash_height / Stage._height * 100;

ну про каждый скейл я не писал, (так как решал задачу передав параметры единажды при загрузке), но при каждом скейле просто замечательно. Щас попробую Вашу мысль.
Оригинальный размер сохранять не нужно. Картинка всегда должна быть на весь экран по ширине (ширина объекта в ХТМЛе 100%), ширина самой картинки внутри ролика тоже 100%. А вот высота ее должна быть пропорциональна ширине независимо от того какие пропорции в браузере.

Для полной аналогии могу сказать, что мне нужно получить то, что делает например ACDSee когда просматриваешь изображения включив режим масштабирования Fit Width. По ширине картинка всегда по размеру окна ACDSee (какое бы оно не было), а по высоте картинку можно скролить если она не влезает (но пропорции картинки всегда идеальны)

Добавлено через 16 минут
Цитата:

Сообщение от fljot (Сообщение 814950)
возможно задача крайне специфическая, но обычно легче запретить масштабирование и контролировать размеры и позиции элементов.. почитай про резину, вопросы точно отпадут

RGP. flux.

Я во флеше лох... Погодь.
А могу я задать флешку параметры так, что бы он не масштабировался вместе с окном браузера, но при этом занимал всю область в браузере? Как бы увеличивал свою область ролика, но не менял масштаб? Если ДА, то я решу эту задачу в 2 счета %)

fljot 23.04.2009 17:08

именно это я тебе и твержу. почитай в хелпе про класс Stage. Stage.scaleMode, Stage.align, Stage.onResize


Часовой пояс GMT +4, время: 16:59.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.