Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Масштабирование объекта в окне (http://www.flasher.ru/forum/showthread.php?t=192673)

StasHappy 17.01.2013 21:16

Масштабирование объекта в окне
 
Привет!

В html, при вставке Flash объекта на страницу, есть такой параметр:
Код:

<param name='scale' value='noborder'/>
который изменяет размер анимации, пропорционально, а лишние полоски по бокам, скрывает. Как можно сделать тоже самое в ActionScript? Я пробовал сам высчитать высоту, ширину и позицию обьекта, не получилось.

Если скажем, размер рабочей области составляет 640x480 пикс, а обьект, пусть будет 1024x600 пикс. И значит, если уменьшить наш обьект, относительно меньшей стороны, до размера рабочей области, получаем 819x480 пикс. Ну а далее, помещаем, наш уменьшенный обьект в рабочую область и смещаем влево по x координате на "(819-640)/2". То же самое применительно, если и высота обьекта, больше его ширины.

Как реализовать это в коде?:)

StasHappy 17.01.2013 22:02

Вложений: 1
Пробовал менять Параметры Публикации. Не помогло.

GBee 17.01.2013 22:16

scaleX, scaleY у стейджа или другого папы.

Riki 18.01.2013 00:23

Код AS3:

function resizePicture() {
                        var delitel=0;
                        pLoader.x=0;
                        pLoader.y=0;
                        if (pLoader.width>fotoHolder_Width || pLoader.width<fotoHolder_Width) {
                                delitel=pLoader.width/fotoHolder_Width;
                                pLoader.width=pLoader.width/delitel;
                                pLoader.height=pLoader.height/delitel;
                        }
 
                        if (pLoader.height>fotoHolder_Height || pLoader.height>fotoHolder_Height) {
                                delitel=pLoader.height/fotoHolder_Height;
                                pLoader.height=pLoader.height/delitel;
                                pLoader.width=pLoader.width/delitel;
                        }
                        pLoader.x=(fotoHolder_Width-pLoader.width)/2;
                        pLoader.y=(fotoHolder_Height-pLoader.height)/2;
                        trace("resized");
                }

pLoader - загруженная картинка
fotoHolder_Width - высота контейнера
fotoHolder_Height - ширина контейнера

StasHappy 18.01.2013 01:09

Вложений: 1
Благодарю. Скачал какой то ролик, с этого адреса:http://psycity.ru/design_img/overstep/absynth.swf, чтобы протестить...
Вставил его в свою сцену. Вот что получилось(изображение), в результате компиляции. Уверены, может где недочет в коде? Или сама флешка у них корявая какая то?:)

StasHappy 18.01.2013 21:49

Цитата:

if (pLoader.height>fotoHolder_Height || pLoader.height>fotoHolder_Height) {
В этой строке, в знаках сравнения, нет ошибок?

Riki 19.01.2013 21:09

Цитата:

Сообщение от StasHappy (Сообщение 1116388)
Благодарю. Скачал какой то ролик, с этого адреса:http://psycity.ru/design_img/overstep/absynth.swf, чтобы протестить...
Вставил его в свою сцену. Вот что получилось(изображение), в результате компиляции. Уверены, может где недочет в коде? Или сама флешка у них корявая какая то?:)

Что вам здесь, не нравится?
Все верно сделано.

StasHappy 19.01.2013 21:25

Вот здесь, почему одно и тоже, проверяем два раза? По моему здесь что-то не так.
Код AS3:

if (pLoader.height>fotoHolder_Height || pLoader.height>fotoHolder_Height) {

Я исправил на это:
Код AS3:

if (pLoader.height<fotoHolder_Height) {

Проблема сразу разрешилась. Обьект, стал пропорционально масштабироваться на всю рабочую область. Благодарю за помощь!:-)

Riki 19.01.2013 23:36

Понимаете в чем дело, мы не одно и то же проверяем, мы проверяем для картинок которые меньше контейнера, и для которые больше контейнера, поэтому там два условия, а между ними or(||, "или" по-русски)

И исходный файл, очень в редких случаях будет масштабироваться на весь контейнер(не смотря на то что таких вариантов может быть бесконечно, но все же, в реальной жизни не много будет таких картинок которые будут именно "пропорционально" масштабироваться на весь контейнер, если вам конечно надо "пропорционально", а не наоборот :-) )

StasHappy 20.01.2013 00:56

Вложений: 1
Хм... Я в недоумении. В проверяемом вами условии, оба знака сравнения, в одну и ту же сторону. А левое и правое условия, идентичны. Это получается тоже самое, что и:

Код AS3:

if(A>B || A>B) {
// other code...
}

Не могу уловить логики данных операций.:-))

В общем, вот тут я начеркал в Фотошопе наглядный пример, поставленной задачи.


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

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