Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.09.2010, 20:34
wcbfalcon вне форума Посмотреть профиль Отправить личное сообщение для wcbfalcon Найти все сообщения от wcbfalcon
  № 1  
Ответить с цитированием
wcbfalcon

Регистрация: Aug 2010
Сообщений: 29
Question Резина + пропорции

Создавал флешку тянущуюся по ширине страницы
использовал метод "резиновый ролик" но столкнулся с трудностями:
Мне нужно чтобы при растяжении объект внутри ролика растягивался одновременно и в ширину и в высоту при этом сохранял свои пропорции при этом в высоту он просто будет уходить под слой (внизу) из за чего появится скрол (но не в этом суть)
суть в том что даже использование _xscale и _yscale не помогло
подскажите если ктото сталкивался или если есть варианты решения

Старый 03.09.2010, 00:30
fessor вне форума Посмотреть профиль Отправить личное сообщение для fessor Найти все сообщения от fessor
  № 2  
Ответить с цитированием
fessor

Регистрация: Oct 2009
Сообщений: 101
невозможно организовать одновременно резиновый ролик и сохранение пропорций - эти условия противоречат друг-другу. Представьте что ваш ролик превратят в узкую горизонтальную или вертикальную полоску и скажите, как должны вести себя элементы ролика - должны сохранить пропорции и остаться компактной кучкой посередине ролика, разползтись по краям ролика с сохранением пропорций или не сохраняя пропорций занять максимально-возможное пространство (заполнить собой всю узкую полосу)

Старый 03.09.2010, 00:42
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 3  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
Цитата:
Сообщение от wcbfalcon Посмотреть сообщение
суть в том что даже использование _xscale и _yscale не помогло
Скорее всего что-то не так сделали. Для детальной подсказки мало данных.

Код AS1/AS2:
	mc._width = требуемая ширина;
	mc._yscale = mc._xscale; // выравниваем высоту с сохранением ширины

Старый 03.09.2010, 00:43
Stargazer вне форума Посмотреть профиль Отправить личное сообщение для Stargazer Найти все сообщения от Stargazer
  № 4  
Ответить с цитированием
Stargazer

Регистрация: Nov 2008
Сообщений: 528
fessor, автор говорит, что его устраивает вертикальный скролл (а контент пусть исчезнет за нижней границей флешки).

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

Старый 03.09.2010, 12:34
wcbfalcon вне форума Посмотреть профиль Отправить личное сообщение для wcbfalcon Найти все сообщения от wcbfalcon
  № 5  
Ответить с цитированием
wcbfalcon

Регистрация: Aug 2010
Сообщений: 29
оперировать функциями _yscale не выходит
объясню причину:
есть 3 блока (b1, b11, b2), блок b11 находится внутри блока b1
при растяжении обрабатывается ширина блока b1 а соответственно растягиваются (в ширину) все объекты внутри этого блока при этом _yscale и _xscale у них остается 100% (так как меняется %-е соотношение только родительного блока)
тут то и получается загвоздка

Код AS1/AS2:
Stage.scaleMode = "noScale";
Stage.align = "TL";
var resize_obj = {};
resize_obj.normal_width = 500;
resize_obj.normal_height = 300;
resize_obj.position = [   
                       bl01,
                       bl01.bl01_1,
                       bl02
                       ];
resize_obj.onResize = function(){
    var clip;
    for (var i in this.position) {
        clip = this.position[i];
        clip._x = Stage.width*clip._xRatio;
        clip._y = Stage.height*clip._yRatio;
        if (clip._widthRatio != undefined) {
            clip._width = Stage.width*clip._widthRatio;
        }
        if (clip._heightRatio != undefined) {
            clip._height = Stage.height*clip._heightRatio;
        }
    }
};
Stage.addListener(resize_obj);
var clip;
for (var i in resize_obj.position) {
    clip = resize_obj.position[i];
    clip._xRatio = clip._x/resize_obj.normal_width;
    clip._yRatio = clip._y/resize_obj.normal_height;
}
bl01._widthRatio = bl01._width/resize_obj.normal_width;
resize_obj.onResize();
Добавлено через 7 минут
пока писал сообщение ковырялся в коде и наткнулся на мысль которая помогла отчасти решить изначально поставленную задачу
Код AS1/AS2:
...
resize_obj.onResize = function(){
 
    bl01.bl01_1._yscale = bl01._xscale;
 
    var clip;
    for (var i in this.position) {
        clip = this.position[i];
        clip._x = Stage.width*clip._xRatio;
        clip._y = Stage.height*clip._yRatio;
        if (clip._widthRatio != undefined) {
            clip._width = Stage.width*clip._widthRatio;
        }
        if (clip._heightRatio != undefined) {
            clip._height = Stage.height*clip._heightRatio;
        }
    }
};
...
добавил в работе функции координирование масштаба при том именно соотношение высоты вложенного блока к ширине родительного

Но появилась новая задача исходя из этого как заставить другие блоки (внутри первого) сохранять свой масштаб даже при растяжении (тоесть если был квадрат 100х100 то и после растяжении он должен выглядеть как 100х100.

Если у кого есть совет по этому поводу заранее буду благодарен (если успею сам решить проблему отпишусь о результате)

Старый 03.09.2010, 13:07
wcbfalcon вне форума Посмотреть профиль Отправить личное сообщение для wcbfalcon Найти все сообщения от wcbfalcon
  № 6  
Ответить с цитированием
wcbfalcon

Регистрация: Aug 2010
Сообщений: 29
Решением оказалось вот:
в самом начале добавляем переменный содержащие масштаб нужного блока (в часности я записывал только ширину так как по высоте не растягиваю)
Код AS1/AS2:
b1_Nxs = b1._xscale;
b1_2_xs = b1.b1_2._xscale;
после чего в обработку функции resize_obj.onResize = function(){
вписал такое выражение:
Код AS1/AS2:
b1_Kxs = b1._xscale;
b1.b1_2._xscale = b1_2_xs / (b1_Kxs / b1_Nxs);
Тоесть вычисляя на сколько маштаб первого блока после растяжения изменился относительно его реального размера я уменьшаю блок находящийся внутри первого на эту разницу тем самым получаю при любом растяжении внутренний блок с маштабом 100%

Вполне возможно что я сделал это не совсем грамотно и при большом количестве блоков запись будет грамосткой. Если кто переделает ее в более коректную скажу спасибо

Внизу приложен исходник примера если когото заинтересовал
Вложения
Тип файла: rar test02.rar (8.3 Кб, 39 просмотров)

Старый 03.09.2010, 15:21
Stargazer вне форума Посмотреть профиль Отправить личное сообщение для Stargazer Найти все сообщения от Stargazer
  № 7  
Ответить с цитированием
Stargazer

Регистрация: Nov 2008
Сообщений: 528
Цитата:
Если кто переделает ее в более коректную скажу спасибо
Наиболее удобным будет унаследоваться от мувиклипа, переопределть width и height, и сделать своё поведение в ответ на изменение размера. Или, надёжнее width и height не трогать, а ввести новые свойства, например, componentWidth, componentHeight - и использовать их. Сделать событие ComponentChange и слать его, когда ваши размеры изменились, чтобы вложенные клипы могли на него подписаться и тоже соответственно изменить своё положение/размеры.

Старый 07.09.2010, 12:06
wcbfalcon вне форума Посмотреть профиль Отправить личное сообщение для wcbfalcon Найти все сообщения от wcbfalcon
  № 8  
Ответить с цитированием
wcbfalcon

Регистрация: Aug 2010
Сообщений: 29
сразу не бросилось в глаза только заметил косяк
когда загружаем флешку уже в ХТМЛе (к примеру на всю ширину экрана) то растяжение по ширене срабатывает а вот по высоте позиционирование происходит только если сдвинуть окно браузера хотябы на 1пх
посоветуйте как заставить высоту срабатывать одновременно с шириной при загрузке

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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