Просмотр полной версии : Масштабирование объекта в окне
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
Пробовал менять Параметры Публикации. Не помогло.
scaleX, scaleY у стейджа или другого папы.
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
Благодарю. Скачал какой то ролик, с этого адреса:http://psycity.ru/design_img/overstep/absynth.swf, чтобы протестить...
Вставил его в свою сцену. Вот что получилось(изображение), в результате компиляции. Уверены, может где недочет в коде? Или сама флешка у них корявая какая то?:)
StasHappy
18.01.2013, 21:49
if (pLoader.height>fotoHolder_Height || pLoader.height>fotoHolder_Height) {
В этой строке, в знаках сравнения, нет ошибок?
Благодарю. Скачал какой то ролик, с этого адреса:http://psycity.ru/design_img/overstep/absynth.swf, чтобы протестить...
Вставил его в свою сцену. Вот что получилось(изображение), в результате компиляции. Уверены, может где недочет в коде? Или сама флешка у них корявая какая то?:)
Что вам здесь, не нравится?
Все верно сделано.
StasHappy
19.01.2013, 21:25
Вот здесь, почему одно и тоже, проверяем два раза? По моему здесь что-то не так.
if (pLoader.height>fotoHolder_Height || pLoader.height>fotoHolder_Height) {
Я исправил на это:
if (pLoader.height<fotoHolder_Height) {
Проблема сразу разрешилась. Обьект, стал пропорционально масштабироваться на всю рабочую область. Благодарю за помощь!:-)
Понимаете в чем дело, мы не одно и то же проверяем, мы проверяем для картинок которые меньше контейнера, и для которые больше контейнера, поэтому там два условия, а между ними or(||, "или" по-русски)
И исходный файл, очень в редких случаях будет масштабироваться на весь контейнер(не смотря на то что таких вариантов может быть бесконечно, но все же, в реальной жизни не много будет таких картинок которые будут именно "пропорционально" масштабироваться на весь контейнер, если вам конечно надо "пропорционально", а не наоборот :-) )
StasHappy
20.01.2013, 00:56
Хм... Я в недоумении. В проверяемом вами условии, оба знака сравнения, в одну и ту же сторону. А левое и правое условия, идентичны. Это получается тоже самое, что и:
if(A>B || A>B) {
// other code...
}
Не могу уловить логики данных операций.:-))
В общем, вот тут я начеркал в Фотошопе наглядный пример, поставленной задачи.
Ой, Господи ну ошибся в знаке, проблема поменять?(притом выше есть пример для 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)
Вот вот, я же говорил что здесь чтото не так.:)
Вчера после работы, посидел чутка с тетрадкой и калькулятором. У меня вышел такой вариант:
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.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.