Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Самая простая в мире прокрутка... И нет нигде :-( (http://www.flasher.ru/forum/showthread.php?t=98620)

serdeles 17.07.2007 18:26

Самая простая в мире прокрутка... И нет нигде :-(
 
Извините, что всё же спрашиваю "сотый раз". Но не нашёл ничего похожего - час лазил в поиске - аж голова опухла.

В общем, приспичило мне сделать прокрутку картинок. Всего их шесть, они распологаются горизонтально вряд. Видны тока две (маска). Справа и слева есть кнопочки. При наведении на правую кнопку, картинки должны двигаться влево - до шестой. При наведении на левую - они движутся вправо. Если убрать мышку, то всё просто останавливается - типа "пауза". Ни исходника, ни кода примерно решающих эту задачу, найти не удалось :-(

Есть у меня один код, но там в исходнике заморочки, так как мувик с картинками, который прокручивается и который лежит на главной сцене, имеет метку "in". Когда я пытаюсь сделать в новом файле такую же метку мувика, мне выскакивает окошко, что, типа, "in" зарезервировано системой.

Код:

on (rollOver) {
        _root.right = "1";
}
on (rollOut) {
        _root.right = "0";
}

Можно ли заменить "_root.right " на имя мувика (в смысле, на его метку)? Тогда, возможно, я решил бы эту проблему... Но чёта не выходит...

Ведьмак 17.07.2007 18:31

при наведении на любую из кнопок запускаешь onEnterFrame и двигаешь мувик где лежат картинку в нужную сторону... уводишь с кнопки - delete(onEnterFrame), чтобы остановить

serdeles 17.07.2007 18:36

То есть вместо "on (rollOver)" надо "onEnterFrame" писать? Или это функция запускается для "on (RollOver)"?
Может, поделитесь кодом? Чтобы хотя бы более менее синтаксис видеть...

Ведьмак 17.07.2007 19:01

да эта функция запускается при on(rollOver)... она выполняет указанные действия при каждой смене кадра (т.е. со скоростью FPS)... а при on(rollOut) эту функцию удаляешь, чтобы остановить движение...

можешь глянуть http://www.kirupa.com/developer/mx2004/thumbnails.htm на XML внимания не обращай, но прокрутка реализована

CGandA 17.07.2007 19:03

Пример с исходником
P.S. Опоздал...

serdeles 17.07.2007 19:05

Спасибо, попробую...
Но в написании скриптов я дурак-дураком :-(
Ладно, буду пытаться написать путём проб и ошибок.

serdeles 17.07.2007 19:06

CGandA, ничего не опоздал. Даже очень кстати твой исходник! Спасибо! :drinks:

serdeles 17.07.2007 19:23

Глянул я исходник... Нашёл даже место, где "onEnterFrame" и дельта... Но блин, его оттудова ещё надо выковыривать, избавляться от всяких "createEmptyMovieClip" и прочее... Много гемора для моего уровня (точнее его плинтуса).

А как-то попроще это нельзя реализовать? Я привёл в начале код - там в принципе всё понятно и работает. Единственное, что там "root", где метка стоит непонятная у мувика с картинками... Может, всё же "root" сменить на имя мувика или ещё на чёнть?

Wolsh 17.07.2007 19:55

Код:

левая кнопка.onRollOver = function(){
      мувик_с_картинками.onEnterFrame = function(){
              мувик_с_картинками._x--;
              }
}
левая кнопка.onRollOut = function(){
      delete мувик_с_картинками.onEnterFrame
}
правая кнопка.onRollOver = function(){
      мувик_с_картинками.onEnterFrame = function(){
              мувик_с_картинками._x++;
              }
}
правая кнопка.onRollOut = function(){
      delete мувик_с_картинками.onEnterFrame
}


serdeles 17.07.2007 19:59

Спасибо, Wolsh! Это уже больше похоже на спасательный круг :yahoo:

serdeles 18.07.2007 14:55

Всё работает! Именно то, что было надо!
Единственное, вдогонку хочу задать ещё ОДИН вопрос относительно кода (by Wolch):

Как задать предел прокрутки? То есть докрутить "мувик_с_картинками" до определённого места и чтобы дальше он не мог двигаться. Естессна в обоих направлениях (в данном случае, вправо и влево).

serdeles 18.07.2007 15:57

Что, никто не в курсе?
Или может я не так объяснил...

В общем, видимая часть в галерее - это маска, расчитанная на две картинки. Всего в галерее - шесть картинок.

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

То же самое и с началом галереи. В маске видны первые две картинки.

Я так думаю, какоие-то пределы нужно задать справа и слева, но как это сделать...

Wolsh 18.07.2007 16:14

Что же тут сложного? Пора уже головой слегка своей тоже задумываться.

Код:

левая кнопка.onRollOver = function(){
      мувик_с_картинками.onEnterFrame = function(){
              if (мувик_с_картинками._x > маска._x+маска._width-мувик_с_картинками._width) {
                    мувик_с_картинками._x--;
              }     
      }
}
левая кнопка.onRollOut = function(){
      delete мувик_с_картинками.onEnterFrame
}
правая кнопка.onRollOver = function(){
      мувик_с_картинками.onEnterFrame = function(){
              if (мувик_с_картинками._x < маска._x) {
                      мувик_с_картинками._x++;
              }
      }
}
правая кнопка.onRollOut = function(){
      delete мувик_с_картинками.onEnterFrame
}


serdeles 18.07.2007 16:20

Спасибо!

serdeles 18.07.2007 16:49

Вложений: 1
Всё сделал вроде как надо. Но работает всё же не совсем так....

Прицепляю исходник. Единственное, что там не устраивает - это остановка не в том месте (слишком уж далеко влево уходит галерея) при наведении на левую кнопку.

И потом когда в обратную сторону идёт, не доходит до конца, при наведении на правую.

В исходнике видно в общем, что к чему...

serdeles 18.07.2007 17:23

Половину проблемы решил самостоятельно. Чтобы галерея не уходила слишком далеко влево при наведении на левую кнопку, прибавил цифровое значение к "_width":
Код:

if (gal._x > mask._x+mask._width-gal._width+95)
Остаётся вопрос с правой кнопкой - там этот номер не проходит...

serdeles 18.07.2007 18:19

Вложений: 1
Ура! Проблема решена.
Даю код и исходник, на случай если кому понадобится.
Код:

b1.onRollOver = function(){
      gal.onEnterFrame = function(){
              if (gal._x > mask._x+mask._width-gal._width+95) {
                    gal._x-=5;
              }     
      }
}
b1.onRollOut = function(){
      delete gal.onEnterFrame
}
b2.onRollOver = function(){
      gal.onEnterFrame = function(){
              if (gal._x < mask._x+mask._width-45) {
                      gal._x+=5;
              }
      }
}
b2.onRollOut = function(){
      delete gal.onEnterFrame
}

k1.onRollOver = function(){
      gal2.onEnterFrame = function(){
              if (gal2._x > mask2._x-mask2._width-gal2._width+530) {
                    gal2._x-=5;
              }     
      }
}
k1.onRollOut = function(){
      delete gal2.onEnterFrame
}
k2.onRollOver = function(){
      gal2.onEnterFrame = function(){
              if (gal2._x < mask2._x+mask2._width+75) {
                      gal2._x+=5;
              }
      }
}
k2.onRollOut = function(){
      delete gal2.onEnterFrame
}


Wolsh 18.07.2007 18:39

Ну конечно, если у тебя в маске прямоугольник стоит не ноль в ноль, а в галерее картинки тоже нифига не с нуля начинаются, то мои формулы в чистом виде бессильны :)
На будущее приучи себя все ставить в ноль, тогда маска._х всегда будет означать то место, откуда маска начинается ;)
Удачи

Ведьмак 19.07.2007 13:14

и не делать много сообщений подряд... есть кнопка "изменить"..


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

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