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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.05.2010, 19:37
serdeles вне форума Посмотреть профиль Отправить личное сообщение для serdeles Найти все сообщения от serdeles
  № 1  
Ответить с цитированием
serdeles
[+4 24.05.10]

Регистрация: May 2003
Адрес: Москва
Сообщений: 186
По умолчанию Как сделать массив и выровнять его по центру?

Есть резиновый флеш. В нем несколько мувиков (предположим, mc1, mc2, mc3). Расстояние между ними изменяются по ширине в зависимости от размера экрана пользователя.

Нужно эти мувики расположить по горизонтальному центру сцены (как бы соединить их в группу и отцентровать). Подскажите, как это сделать.

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

Код AS1/AS2:
массив._x = (Stage.width-массив._width)/2
В целом понимаю, но с синтаксисом AS у меня проблемы. Надеюсь, подскажете.

На всякий случай, код — в целом он примерно таков:

Код AS1/AS2:
Stage.scaleMode = "noScale";
Stage.align = "TL";
 
var resize_obj = {};
 
resize_obj.normal_width = 400;
resize_obj.normal_height = 300;
 
resize_obj.position = [mc1, mc2, mc3];
 
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;
}
 
mc1._Ratio = mc1.noScale;
mc2._Ratio = mc2.noScale;
mc3._Ratio = mc3.noScale;
__________________
Достал уж всех своими глупыми вопросами...

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

Регистрация: Feb 2008
Сообщений: 560
Что-то навроде этого:

Код AS1/AS2:
    var clip;
    var cwidth = 0;
    var cdist = 10; // расстояние между клипами
    // вычисляем ширину блока клипов
    for (var i in this.position) {
        clip = this.position[i];
        cwidth += clip._width;
    }
    cwidth += (this.position.length - 1) * cdist;
    // располагаем клипы слева направо
    var curpos = (Stage.width - cwidth) / 2;
    for (var i in this.position) {
        clip = this.position[i];
        clip._x = curpos;
        clip._y = (Stage.height - clip_height) / 2;
        curpos += clip._width + cdist;
    }
Во флеше не проверял, но должно работать. Алгоритм зависит от того, где находится точка привязки клипов. В этом коде я предположил что точка привязки - слева вверху. Общий смысл - считаем ширину всех блоков, добавляем интервалы между ними, начинаем располагать блоки слева направо, начиная с рассчитанной точки.

Старый 28.05.2010, 12:54
serdeles вне форума Посмотреть профиль Отправить личное сообщение для serdeles Найти все сообщения от serdeles
  № 3  
Ответить с цитированием
serdeles
[+4 24.05.10]

Регистрация: May 2003
Адрес: Москва
Сообщений: 186
Спасибо. Но сейчас такая ситуация, что расстояние между клипами по ширине является не фиксированным, а резиновым (меняется при изменении ширины окна).
__________________
Достал уж всех своими глупыми вопросами...

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

Регистрация: Feb 2008
Сообщений: 560
Тогда я не понял что вам нужно.

Если нужно центровать, НО чтобы расстояние между ними было резиновым, то замените

Код AS1/AS2:
var cdist = 10;
на

Код AS1/AS2:
var cdist = Math.floor(Stage.width * 0.05);
тут расстояние будет 5% ширины.

Старый 28.05.2010, 14:52
serdeles вне форума Посмотреть профиль Отправить личное сообщение для serdeles Найти все сообщения от serdeles
  № 5  
Ответить с цитированием
serdeles
[+4 24.05.10]

Регистрация: May 2003
Адрес: Москва
Сообщений: 186
Спасибо, буду пробовать.
__________________
Достал уж всех своими глупыми вопросами...

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

Регистрация: Feb 2008
Сообщений: 560
Если нужно чтобы расстояние между мувиками и краями экрана было равно, то код нужно немного модифицировать, если нужно именно так, то могу написать новый код.

Старый 28.05.2010, 16:58
serdeles вне форума Посмотреть профиль Отправить личное сообщение для serdeles Найти все сообщения от serdeles
  № 7  
Ответить с цитированием
serdeles
[+4 24.05.10]

Регистрация: May 2003
Адрес: Москва
Сообщений: 186
Если вас не затруднит, то буду весьма благодарен за модификацию кода :-)
__________________
Достал уж всех своими глупыми вопросами...

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

Регистрация: Feb 2008
Сообщений: 560
Цитата:
Сообщение от serdeles Посмотреть сообщение
Если вас не затруднит, то буду весьма благодарен за модификацию кода :-)
Если точка привязки в клипах слева вверху, то вот код (во вложении исходник):

Код AS1/AS2:
Stage.scaleMode = "noScale";
Stage.align = "TL";
 
var resize_obj = {};
 
resize_obj.position = [mc1, mc2, mc3];
 
resize_obj.onResize = function() {
	var cdist = (Stage.width - this.cwidth) / (this.position.length + 1);
	var curpos = cdist;
    for (var i in this.position) {
        clip = this.position[i];
        clip._x = curpos;
        clip._y = (Stage.height - clip._height) / 2;
        curpos += clip._width + cdist;
    }
};
 
resize_obj.cwidth = 0;
for (var i in resize_obj.position) {
	resize_obj.cwidth += resize_obj.position[i]._width;
}
 
Stage.addListener(resize_obj);
 
resize_obj.onResize();
 
stop();
Вложения
Тип файла: rar movs.rar (5.6 Кб, 64 просмотров)

Старый 31.05.2010, 12:29
serdeles вне форума Посмотреть профиль Отправить личное сообщение для serdeles Найти все сообщения от serdeles
  № 9  
Ответить с цитированием
serdeles
[+4 24.05.10]

Регистрация: May 2003
Адрес: Москва
Сообщений: 186
Спасибо!
__________________
Достал уж всех своими глупыми вопросами...

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

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

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


 


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


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