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

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

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

Регистрация: Aug 2006
Сообщений: 40
По умолчанию ширина приаттаченных мувиков

Подскажите, пожалуйста, никак разобраться не могу.
Есть галерея из приаттаченных мувиков. Мувики разной ширины.
Нужно чтобы мувики выстраивались друг за другом.

Этот код на форуме выкладывал D12, но там все приаттаченные мувики определенного размера.
Я решил его подправить.
Вот код.

Код:
posX = _root.mc._x;
posY = _root.mc._height/2;
posMask = 0;

var L:Number = 5;
//длина зазора между кнопками
var N:Number = 6;
//количество кнопок
var G:Number = 2;
//скорость для кнопок
var T:Number = 1;
//скорость увеличения и уменьшения для кнопок
var Q:Number = G;
//
for (var i:Number = 1; i<=N; i++) {
	this.attachMovie("phil"+i, "phil"+i, i);
	W = this["phil"+i];
	H = W._width;
	this["phil"+i]._x = (posMask-(H/2))+i*(H+L);
	this["phil"+i]._y = posY;
	this["phil"+i].e = i;
	this["phil"+i].o = 0;
	/////////////////
	this["phil"+i].onEnterFrame = function() {
		this._x -= Q;
		this.onRollOver = function() {
			trace(H);
		}
		if (this._x<posMask-(H+L)) {
			this._x = this._x+((this._width+L)*N);
		}
		//
		if (this.o==1 && this._width<H+(L*2)) {
			this._width = this._height += T;
		}
		if (this.o==0 && this._width>H) {
			this._width = this._height -= T;
		}
	}
}
Укажите, плиз, где я накосячил

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

Регистрация: May 2008
Сообщений: 476
Для начала пересмотрите "странноватые" записи:

Код:
W = this["phil"+i];
H = W._width;
Вот это мне тоже непонятно:

Код:
this["phil"+i].e = i;
this["phil"+i].o = 0;


Последний раз редактировалось Alex_beginner; 25.05.2008 в 18:01.
Старый 25.05.2008, 16:52
mayday вне форума Посмотреть профиль Отправить личное сообщение для mayday Найти все сообщения от mayday
  № 3  
Ответить с цитированием
mayday

Регистрация: Aug 2006
Сообщений: 40
Мне нужно обратиться к аттаченному мувику и узнать его длину.
Мувики разной длины (горизонтальные 600 px и вертикальные 300 px)
Код:
H = this["phil"+i]._width;
trace(H);
не помогает. пишет длину последнего загруженного мувика

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну это какая i того длину и пишет. А вы пробовали в одном цикле приаттачить, а в другом пробежаться и всех расставить? Имхо, так проще и яснее, когда функция делает одно действие.
__________________
Reality.getBounds(this);

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

Регистрация: May 2008
Сообщений: 476
Рекомендую вынести onEnterFrame из цикла и организовать основные действия на основной временной шкале, т.e сделать чтото вроде:

Код:
for (var i:Number = 1; i<=N; i++) 
{
  this.attachMovie("phil"+i, "phil"+i, i);
  .........
}

далее
_root.onEnterFrame = function():Void
{
    this["phil"+i]._x-=Q
    ...... 
}

Старый 25.05.2008, 20:39
mayday вне форума Посмотреть профиль Отправить личное сообщение для mayday Найти все сообщения от mayday
  № 6  
Ответить с цитированием
mayday

Регистрация: Aug 2006
Сообщений: 40
вроде с порядком разобрался
теперь косяк с формулой, с которой мувики выстраиваются друг за другом:
Код:
(posMask-(H/2))+i*(H+L)
Код:
posX = _root.mc._x;
posY = _root.mc._height/2;
posMask = 0;

var L:Number = 5;
//длина зазора между кнопками
var N:Number = 6;
//количество кнопок
var G:Number = 20;
//скорость для кнопок
var Q:Number = G;
//
for (var i:Number = 1; i<=N; i++) {
	this.attachMovie("phil"+i, "phil"+i, i);
	H = this["phil"+i]._width;
	this["phil"+i]._x = (posMask-(H/2))+i*(H+L);
	this["phil"+i]._y = posY;
	trace(this["phil"+i]._x);
	/////////////////
	this["phil"+i].onEnterFrame = function() {
		this._x -= Q;
		if (this._x<posMask-(H+L)) {
			this._x = this._x+((this._width+L)*N);
		}
	}
}
Есть 6 мувиков .. первые 5 из них шириной 290 пикселей, 6й последний - 569.

Те, которые 290 пикселей, выстраиваются нормально друг за другом, последний 6й уезжает ваще куда то далеко ..

Если мы подставим в ту формулу 290, получается все нормально x = 150, 445, 740, 1035, 1330...
А когда подставляешь 569, получается аж x = 3159.5

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

Регистрация: May 2008
Сообщений: 476
Если подождете до завтра. Я Вам готовый код представлю.

Старый 25.05.2008, 21:16
mayday вне форума Посмотреть профиль Отправить личное сообщение для mayday Найти все сообщения от mayday
  № 8  
Ответить с цитированием
mayday

Регистрация: Aug 2006
Сообщений: 40
Большое спасибо.

Старый 25.05.2008, 21:41
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Почему бы не завести переменную и наращивать ее на ширину приаттаченного мувика в каждой итерации.
__________________
Reality.getBounds(this);

Старый 26.05.2008, 10:50
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 10  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Mayday!Здраствуйте!

Если я правильно понял Вашу идею, то должно получиться вот такое
(100 % рабочий код - тестировал в Флеше):

Код:
var posX:Number = 200;//конечная позиция клипов - X
var posY:Number = 200;//конечная позиция клипов - Y
var posMask:Number = 0;//ваще незнаю
var finalWidth:Number = 30; //ширина мувиков, когда они выстроятся в одну колоду
var finalHeight:Number = 30; //высота мувиков, когда они выстроятся в одну колоду
var numSteps:Number = 50;//количество шагов за которое клипы достигнут конечного состояния
var counterSteps:Number = 0;//счетчик шагов
var mc_name:String = null;//промежуточная переменная
var mc_wd:Number = null;//ширина клипа
var half_wd:Number = null;//полуширина клипа
var prev_mc_rx:Number = 0;//крайняя правая координата клипа
var varStepX:Number = null;//промежуточная переменная - шаг по X

var L:Number = 6;
//длина зазора между кнопками
var N:Number = 4;
//количество кнопок
var G:Number = 4;
//скорость для кнопок
var T:Number = 1;
//скорость увеличения и уменьшения для кнопок
var Q:Number = G;



for (var i:Number = 1; i<=N; i++) 
{
	mc_name = "phil"+i; //микрооптимизация
	this.attachMovie(mc_name,mc_name,i);
	mc_wd =this[mc_name]._width; //микрооптимизация
	half_wd = mc_wd/2; //микрооптимизация
	this[mc_name]._x = prev_mc_rx+half_wd+L;//для точки регистрации в центре клипа
	this[mc_name]._y = posY;
	prev_mc_rx = this[mc_name]._x+half_wd;//для точки регистрации в центре клипа
	this[mc_name].stepX = (posX-this[mc_name]._x)/numSteps;//шаг по X
	this[mc_name].stepW = (finalWidth-mc_wd)/numSteps;//шаг по ширине клипа
	this[mc_name].stepH = (finalHeight-this[mc_name]._height)/numSteps;//шаг по высоте клипа
}

this.onEnterFrame = function():Void
{
	for (var i:Number = 1; i<=N; i++)
	{
		mc_name = "phil"+i; //микрооптимизация
		varStepX = this[mc_name].stepX;
		if (varStepX!=0)
		{
		   this[mc_name]._x +=varStepX;//движемся по X
		   this[mc_name]._width+=this[mc_name].stepW;//увеличиваем/уменьшаем длину клипа
		   this[mc_name]._height+=this[mc_name].stepH;//увеличиваем/уменьшаем высоту клипа
		}
	}
	if (counterSteps==numSteps) delete this.onEnterFrame;
	counterSteps+=1;
}
Есть еще "гемороидальный" способ добиться того же результата - класс Matrix, но я думаю для решения поставленной задачи сойдет и этот код.
Все вышеприведенные методы несколько несовершенны. Более лаконичный метод это использование класса Tween и трансформационной анимации флеша.


Последний раз редактировалось Alex_beginner; 26.05.2008 в 15:00.
Создать новую тему Ответ Часовой пояс GMT +4, время: 02:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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