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

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

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

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

Ребята, подскажите, пожалуйста, уделите Ваше внимание! Не знаю как сделать ..
Есть горизонтальный скролл куда приаттачиваются мувики (в любом количестве) .. Скролл осуществляется по движению мыши
Как мне сделать, чтобы этот скролл был зацикленный? Чтобы при движении влево первый мувик, выезжая за пределы сцены, переносился бы после последнего. А при движении вправо, наоборот, последний мувик становился бы перед первым и т. д.

Вот код:

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

var mouseListener:Object = new Object();
mouseListener.onMouseMove = function() {
	center = Stage.width/2;
	shag = (_xmouse-center)/10;
}
Mouse.addListener(mouseListener);

var L:Number = 5;
//длина зазора между кнопками
var N:Number = 5;
//количество кнопок
var G:Number = 1;
//скорость для кнопок
var Q:Number = G;
//
for (var i:Number = 1; i<=N; i++) {
	this.attachMovie("photo"+i, "photo"+i, i);
	this["photo"+i]._x = ((mcOld._x + mcOld._width) || mcOld._x)+L;
	mcFirst = this["photo1"]._x;	
	mcOld = this["photo"+i];
	mcLast = this["photo"+N]._x+this["photo"+N]._width+L;
	this["photo"+i]._y = posY;	
	this["photo"+i].onEnterFrame = function() {
		if(_xmouse<center){
			this._x -= shag;
			if (this._x<posMask-this._width) {
				this._x = this._x+mcLast;
			}
		} else {
			this._x += -shag;
		}
	}
}
Вот исходник:
Вложения
Тип файла: rar primer.rar (5.6 Кб, 211 просмотров)


Последний раз редактировалось mayday; 01.06.2008 в 11:00.
Старый 01.06.2008, 10:54
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Как вариант: смотришь, когда крайний мувик доходит до "критической точки", и переносишь его на другую сторону. Эту "критическую точку" нужно расчитывать самому, в зависимости от количества фоток и её длины.

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

Регистрация: May 2008
Сообщений: 476
Привет! mayday! Узнаю этот код. Я вижу Вы его перестроили в корне. Хотя непонятно зачем Вы создаете обработчик onEnterFrame для каждого клипа.
Идея мне вообщем понятна. Вот тут мне непонятно:

Код:
if (this._x<posMask-this._width) {
this._x = this._x+mcLast;
Насколько я понимаю, при x координате клипа меньшей чем его ширина он должен перенестись в правый край.

mcLast вычисляется в строчке:
Код:
mcLast = this["photo"+N]._x+this["photo"+N]._width+L;
Обратите внимание: N!!!!, а не i !!! Змените N на i. И будем думать дальше.

Теперь, если всеже через N, тогда mcLast никак не может быть вычислено для текущего клипа (см. блок onEnterFrame) поскольку последний клип this["photo"+N] еще не приатачен.


Последний раз редактировалось Alex_beginner; 01.06.2008 в 12:05.
Старый 01.06.2008, 12:17
mayday вне форума Посмотреть профиль Отправить личное сообщение для mayday Найти все сообщения от mayday
  № 4  
Ответить с цитированием
mayday

Регистрация: Aug 2006
Сообщений: 40
Привет, Alex_beginner!
Поменял N на i

Пока получилось сделать движение влево с приаттачиванием после последнего мувика..
Вправо пока никак ((

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

var mouseListener:Object = new Object();
mouseListener.onMouseMove = function() {
	center = Stage.width/2;
	shag = (_xmouse-center)/10;
}
Mouse.addListener(mouseListener);

var L:Number = 5;
//длина зазора между кнопками
var N:Number = 5;
//количество кнопок
var G:Number = 1;
//скорость для кнопок
var Q:Number = G;
//
for (var i:Number = 1; i<=N; i++) {
	this.attachMovie("photo"+i, "photo"+i, i);
	this["photo"+i]._x = ((mcOld._x + mcOld._width) || mcOld._x)+L;
	mcOld = this["photo"+i];
	mcLast = this["photo"+i]._x+this["photo"+i]._width+L;
	this["photo"+i]._y = posY;	
	this["photo"+i].onEnterFrame = function() {
		if(_xmouse<center){
			this._x -= shag;
                                  //тут пока хз
			//if (this._x<posMask-this._width) {
			//	this._x = this._x+mcLast;
			//}
		}
		if(_xmouse>center){
			this._x += -shag;
			if (this._x<posMask-this._width) {
				this._x = this._x+mcLast;
			}
		}
	}
}

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

Регистрация: May 2008
Сообщений: 476
Вот сравните строчки:

Код:
this._x -= shag;
и

Код:
this._x += -shag;
Как Вы думаете, это одно и тоже или нет?

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

Регистрация: Aug 2006
Сообщений: 40
Цитата:
Сообщение от Alex_beginner Посмотреть сообщение
Вот сравните строчки:

Код:
this._x -= shag;
и

Код:
this._x += -shag;
Как Вы думаете, это одно и тоже или нет?
Я знал, что спросите )
Со стороны одно и то же ..
В первом случае shag - положительное число, во втором - отрицательное
Если сделать так:
Код:
this._x -= shag;
и
Код:
this._x += shag;
то мувики будут двигаться только вправо, несмотря на положение мыши

вот для наглядности исходник
Вложения
Тип файла: rar primer.rar (5.7 Кб, 137 просмотров)


Последний раз редактировалось mayday; 01.06.2008 в 12:43.
Старый 01.06.2008, 12:49
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 7  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
А mouseMove есть выше! Я его незаметил. Тогда может сдеалем несколько подругому, если это приемлемо для Вас.

1. Вынесите строчку
Код:
center = Stage.width/2;
из обработчика onMouseMove. Этот обработчик выполняется с довольно большой частотой и каждая строчка в его коде - существенный удар по производительности.
2. Давайте попробуем отказаться от onEnterFrame каждого клипа и сделать все движения в единственном onMouseMove, используя ссылки this["photo"+i]
3. Подписать mouseListener после завершения кода в цикле.

Что это дасть?!!
1. Код в цикле сократиться
2. Будет только один обработчик
3. На момент окончания работы цикла будет известно значение mcLast
Если все это Вас заинтересовало, попробуте реализовать. Я думаю Вы ничего непотеряете, только выиграете.

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

Регистрация: Aug 2006
Сообщений: 40
оптимизацией я уж потом займусь ..
сейчас основная задача - решить проблему скроллинга вправо
вот только как это сделать ..

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

Регистрация: May 2008
Сообщений: 476
Надо рассматривать проблему в купе.
Как я уже говорил, в коде где вы аттачите мувы Вы тут же создаете обработчики для них onEnterFrame. Но в этих обработчиках используется перменная (mcList) которая не может быть вычислена, если не приаттачины все клипы. Получается змея закусившая свой хвост.
Дак не лучше ли отказаться от onEnterFrame в пользу mouseMove. И начать обработку события onMouseMove после того как созданы все клипы.
Попробуйте так. Если же Вас это неустраивает, ну давайте будем "мучиться" с тем что есть.


Последний раз редактировалось Alex_beginner; 01.06.2008 в 15:06.
Старый 01.06.2008, 15:13
mayday вне форума Посмотреть профиль Отправить личное сообщение для mayday Найти все сообщения от mayday
  № 10  
Ответить с цитированием
mayday

Регистрация: Aug 2006
Сообщений: 40
я actionscript еще плохо знаю и поэтому для меня это пока сложновато будет сделать..
Alex, поможешь доделать? Я в долгу не останусь. а сдавать завтра..

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

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

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


 


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


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