|
|
|||||
Регистрация: 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; } } } Последний раз редактировалось mayday; 01.06.2008 в 11:00. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Как вариант: смотришь, когда крайний мувик доходит до "критической точки", и переносишь его на другую сторону. Эту "критическую точку" нужно расчитывать самому, в зависимости от количества фоток и её длины.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Регистрация: May 2008
Сообщений: 476
|
Привет! mayday! Узнаю этот код. Я вижу Вы его перестроили в корне. Хотя непонятно зачем Вы создаете обработчик onEnterFrame для каждого клипа.
Идея мне вообщем понятна. Вот тут мне непонятно: Насколько я понимаю, при x координате клипа меньшей чем его ширина он должен перенестись в правый край. mcLast вычисляется в строчке: Обратите внимание: N!!!!, а не i !!! Змените N на i. И будем думать дальше. Теперь, если всеже через N, тогда mcLast никак не может быть вычислено для текущего клипа (см. блок onEnterFrame) поскольку последний клип this["photo"+N] еще не приатачен. Последний раз редактировалось Alex_beginner; 01.06.2008 в 12:05. |
|
|||||
Регистрация: 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; } } } } |
|
|||||
Регистрация: May 2008
Сообщений: 476
|
Вот сравните строчки:
и Как Вы думаете, это одно и тоже или нет? |
|
|||||
Регистрация: Aug 2006
Сообщений: 40
|
Цитата:
Со стороны одно и то же .. В первом случае shag - положительное число, во втором - отрицательное Если сделать так: и то мувики будут двигаться только вправо, несмотря на положение мыши вот для наглядности исходник Последний раз редактировалось mayday; 01.06.2008 в 12:43. |
|
|||||
Регистрация: May 2008
Сообщений: 476
|
А mouseMove есть выше! Я его незаметил. Тогда может сдеалем несколько подругому, если это приемлемо для Вас.
1. Вынесите строчку из обработчика onMouseMove. Этот обработчик выполняется с довольно большой частотой и каждая строчка в его коде - существенный удар по производительности. 2. Давайте попробуем отказаться от onEnterFrame каждого клипа и сделать все движения в единственном onMouseMove, используя ссылки this["photo"+i] 3. Подписать mouseListener после завершения кода в цикле. Что это дасть?!! 1. Код в цикле сократиться 2. Будет только один обработчик 3. На момент окончания работы цикла будет известно значение mcLast Если все это Вас заинтересовало, попробуте реализовать. Я думаю Вы ничего непотеряете, только выиграете. |
|
|||||
Регистрация: Aug 2006
Сообщений: 40
|
оптимизацией я уж потом займусь ..
сейчас основная задача - решить проблему скроллинга вправо вот только как это сделать .. |
|
|||||
Регистрация: May 2008
Сообщений: 476
|
Надо рассматривать проблему в купе.
Как я уже говорил, в коде где вы аттачите мувы Вы тут же создаете обработчики для них onEnterFrame. Но в этих обработчиках используется перменная (mcList) которая не может быть вычислена, если не приаттачины все клипы. Получается змея закусившая свой хвост. Дак не лучше ли отказаться от onEnterFrame в пользу mouseMove. И начать обработку события onMouseMove после того как созданы все клипы. Попробуйте так. Если же Вас это неустраивает, ну давайте будем "мучиться" с тем что есть. Последний раз редактировалось Alex_beginner; 01.06.2008 в 15:06. |
|
|||||
Регистрация: Aug 2006
Сообщений: 40
|
я actionscript еще плохо знаю и поэтому для меня это пока сложновато будет сделать..
Alex, поможешь доделать? Я в долгу не останусь. а сдавать завтра.. |
Часовой пояс GMT +4, время: 20:03. |
|
« Предыдущая тема | Следующая тема » |
|
|