PDA

Просмотр полной версии : Самая простая в мире прокрутка... И нет нигде :-(


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
Пример с исходником (http://www.kirupa.com/developer/mx2004/thumbnails.htm)
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
Всё сделал вроде как надо. Но работает всё же не совсем так....

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

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

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

serdeles
18.07.2007, 17:23
Половину проблемы решил самостоятельно. Чтобы галерея не уходила слишком далеко влево при наведении на левую кнопку, прибавил цифровое значение к "_width":
if (gal._x > mask._x+mask._width-gal._width+95)
Остаётся вопрос с правой кнопкой - там этот номер не проходит...

serdeles
18.07.2007, 18:19
Ура! Проблема решена.
Даю код и исходник, на случай если кому понадобится.
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
и не делать много сообщений подряд... есть кнопка "изменить"..