Форум 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...
}

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

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

Riki 20.01.2013 23:02

Ой, Господи ну ошибся в знаке, проблема поменять?(притом выше есть пример для width)

Ну поставленная задача, это никак не пропорциональное масштабирование(Загуглите что вообще такое пропорция).

И теперь для меня вообще огромный вопрос, в чем проблема реализации была? Ведь нужно было тупо, поменять значения width и height для картинки на соответствующие значения для контейнера.


Цитата:

Вот здесь, почему одно и тоже, проверяем два раза? По моему здесь что-то не так.
Код AS3:
if (pLoader.height>fotoHolder_Height || pLoader.height>fotoHolder_Height) {
Я исправил на это:
Код AS3:
if (pLoader.height<fotoHolder_Height) {
Проблема сразу разрешилась. Обьект, стал пропорционально масштабироваться на всю рабочую область. Благодарю за помощь!:-)
И тут проблема НЕ разрешилась, а наоборот, просто условие для height выполняется, так как вы берете картинку больше чем контейнер(ведь вы поменяли условие что бы была проверка только для картинок меньше по высоте чем контейнер).


И последние 2 вопроса для Вас: вы программист? и где вы учитесь?

StasHappy 21.01.2013 05:03

Цитата:

Ой, Господи ну ошибся в знаке, проблема поменять?(притом выше есть пример для width)
Вот вот, я же говорил что здесь чтото не так.:)

Вчера после работы, посидел чутка с тетрадкой и калькулятором. У меня вышел такой вариант:

Код AS3:

if(ldr.width!=stage.stageWidth && ldr.height!=stage.stageHeight) {
var delitel;
 
if (ldr.width>stage.stageWidth && ldr.height>stage.stageHeight) {
if(ldr.width!=ldr.height) {
        if(ldr.width>ldr.height) {
                if(ldr.width/ldr.height<=stage.stageWidth/stage.stageHeight) {
                        delitel = ldr.width/stage.stageWidth;
                        ldr.width = ldr.width/delitel;
                        ldr.height = ldr.height/delitel;
                } else {
                        delitel = ldr.height/stage.stageHeight;
                        ldr.width = ldr.width/delitel;
                        ldr.height = ldr.height/delitel;
                }
        } else {
                        delitel = ldr.width/stage.stageWidth;
                        ldr.width = ldr.width/delitel;
                        ldr.height = ldr.height/delitel;
        }
} else {
                        delitel = ldr.width/stage.stageWidth;
                        ldr.width = ldr.width/delitel;
                        ldr.height = ldr.height/delitel;
}
}
 
 
if(ldr.width<stage.stageWidth && ldr.height>=stage.stageHeight) {
        delitel = stage.stageWidth / ldr.width;
        ldr.width = ldr.width*delitel;
        ldr.height = ldr.height*delitel;
}
 
if(ldr.width>=stage.stageWidth && ldr.height<stage.stageHeight) {
        delitel = stage.stageHeight/ldr.height;
        ldr.width = ldr.width*delitel;
        ldr.height = ldr.height*delitel;
}
 
 
 
 
if(ldr.width<stage.stageWidth && ldr.height<stage.stageHeight) {
if(ldr.width!=ldr.height) {
        if(ldr.width>ldr.height) {
                if(ldr.width/ldr.height>stage.stageWidth/stage.stageHeight) {
                        delitel = stage.stageHeight/ldr.height;
                        ldr.width = ldr.width*delitel;
                        ldr.height = ldr.height*delitel;
                } else {
                        delitel = stage.stageWidth/ldr.width;
                        ldr.width = ldr.width*delitel;
                        ldr.height = ldr.height*delitel;
                }
        } else {
                        delitel = stage.stageWidth/ldr.width;
                        ldr.width = ldr.width*delitel;
                        ldr.height = ldr.height*delitel;
        }
} else {
                        delitel = stage.stageWidth/ldr.width;
                        ldr.width = ldr.width*delitel;
                        ldr.height = ldr.height*delitel;
}
}
 
 
}

Где ldr - это наш обьект. Данный код, расчитан на альбомный тип окна(другой мне в общем то сейчас и не нужен).

Цитата:

И последние 2 вопроса для Вас: вы программист? и где вы учитесь?
А насчет этого.. Да нет, я уже давно отучился. А из программирования, работал только с С++ и PHP.


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

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