Просмотр полной версии : Вопрос по стэкингу.
Как программно управлять позицией объекта в стэке (object stacking).
наверняка тема здесь уже обсуждалась, но я такого не нашел, посему прошу помочь.
Ситуация в упрощенном виде такова:
Кнопка с именем "butt1" лежит рядом с кнопкой "butt2" и эти кнопки пересекаются. Кнопка butt1 накрывает кнопку butt2. Как сделать так, чтобы при наведении мышой на кнопку butt2 сия кнопка вылезла наверх и стала перекрывать первую кнопку??
DeliMIter
15.09.2004, 20:05
У мувиклипа и кнопки есть методы .getDepth() и .swapDepths(), почитай в хелпе. Одного в хелпе нету - свап для кнопок не работает. Т.е. тебе надо засунуть обе кнопки в мувиклипы, и потом уже свапить клипы - контейнеры.
и если я правильно понял, то потом отлавливать маусовер не на кнопках, которые внутри контейнеров, а овер на сам контейнер?...
Еще одно предположение, прошу подправить меня если неточно:
овер на мувиклип отлавливать так: mc.onRollOver = function rollover1 () ???
благодарю за ответ..
Вобщемто хотелось получить примерно такой результат:
http://www.martini.com/home.aspx?language=international&puntos=0&screen=fullscreen&country=10int&initialSection=
Внижней трети экрана бегущая строка с овером
Или же в нижнем левом углу фотки.
Не посчитайте меня ленивым, но хотелось бы глянуть, как бы вы это сделали :)
Благодарю за ответ.
Nox Noctis
15.09.2004, 20:21
Оригинал написал(а) DeliMIter
Одного в хелпе нету - свап для кнопок не работает. Т.е. тебе надо засунуть обе кнопки в мувиклипы, и потом уже свапить клипы - контейнеры.
совсем не обязательно.
см. пример...
Можно эти файлы переписать в формате МХ?
Или же кусок кода, наводящий на размышления скинуть прям в форум...
Nox Noctis
15.09.2004, 20:36
МХ
DeliMIter
16.09.2004, 13:28
Новое, свежее знание.Button.prototype.__proto__ = MovieClip.prototype;И у кнопки появляется рабочий метод .swapDepths(). Правда, Нокс утверждает, что для каких-то свойств или методов может возникать глюк. Вполне может быть. В этом случае достаточно из прототипа мувиклипа скопировать соответствующие методы.
всем спасибы :)
я еще на всякий случай с утра себе флэш 2004 поставил :)
Еще вопрос. обработчик this.onMouseDown работает нормально, а как сделать на ролловер??? Я попробовал this.onRollOver, но чето он не запускается... Помогите плиз
Nox Noctis
16.09.2004, 14:50
а к чему ты его прикрутить пытаешься? не к руту случайно? :) что за this там у тебя?..
Вобщето да :) Я уже понял что ошибся...
Ладно, далее я прикрутил к мувиклипу сие произведение клавиатурного искусства :)) :
on (rollOver)
{
with (_root) {
//trace (td);
this._xscale=150;
this._yscale=150;
btn1.swapDepths(btn2);
btn2.swapDepths(td);
}
}
td я определил в первом фрейме как 100. Трейс показывает переменную.
Теперь у меня другая проблема. Кнопки я положил в разные слои и придал им моушентвином движение.
Как только я навожу мышу на мувиклип - сцена останавливается. Возникает вопрос - почему она останавливается??? И сразу же второй вопрос - как ее запустить дальше??? на роллаут я прицепил play(); но видимых результатов это не дало:
on (rollOut)
{
with (_root) {
this._xscale=100;
this._yscale=100;
btn1.swapDepths(d1);
btn2.swapDepths(d2);
play();
}
}
Плиз хэлп
тут еще одна беда вылезла.
В ссылке файлик, запустите его, дождидесь пока кнопки уедут примерно до половины твина, потом испытайте ролловер и поглядите че секунд через 5 произойдет.
У меня глаза на лоб вылезли... подскажите как с такой ирумдой бороцца.
htttp://www.theabyss.ru/comandor/slider.zip
Nox Noctis
16.09.2004, 15:34
программные изменения свойств объекта прерывают его моушн твин.
в таком случае тебе всё равно нужно положить кнопку в клип. твинишь клип, а программно меняешь масштаб - кнопке внутри клипа. таким образом твин не нарушится. но тогда будет проблема со свапом. чтобы избежать этого - тебе надо вложить весь твин в еще один мувиклип :)
получится слоёнка из трёх уровней: клип, в котором твинится клип, в котором находится кнопка. и на кнопке тогда нужно задать:
— свапить самый внешний клип
— останавливать/запускать твин внутри внешнего клипа
— изменять скейл самой кнопке
тогда всё заработает как задумано :)
Оригинал написал(а) Nox Noctis
программные изменения свойств объекта прерывают его моушн твин.
Очень ценная фраза, она все сразу объясняет. пасиб.. Кстати, редкий случай, когда ктото не просто трепется, а реально вкратце объясняет главное...
Насчет ссылки на файл есть какиенибудь мысли, потому как там чето весьма странное происходит
Nox Noctis
16.09.2004, 15:54
а где там странное? :)
как написал - так и работает.
после свапДепс клип становится "динамическим", т.е. на него перестают действовать кейфреймы (как если бы ты его создал при помощи createEmptyMovieClip, attachMovie или duplicateMovie)
соответственно при проигрывании линейки по второму разу у тебя на сцене уже не два клипа, а четыре :)
я бы включил ОБЕ кнопки в один клип, твинил бы сам этот клип, и свапил бы кнопки внутри этого клипа. тогда при повторном проигрывании ничего не испортится, потому что просто основной твин стартанёт заново.
да, я это уже понял... оптмально
Еще вопрос...можно ли както получить прямой доступ до массива стэка. Это щас у меня 2 кнопки. В оригинале будет 9. Там получается придется писать целое бинарное дерево для swapDepths. А если к примеру задача со свопом будет динамической - т.е. количество своповых объектов будет колебаться от 5 до 1500 к примеру... Как тогда решать вопрос??
Есть конечно идея писать функцию с передаваемыми данными, и циклом к примеру проходить все подряд буттоны... вот правда отойдя метра 2 от экрана этот способ мне кажется анальным :(
Nox Noctis
16.09.2004, 16:10
задать в переменной глубину, на которой будет находиться самая верхняя кнопка. задать в переменной ссылку на текущую кнопку. которая сейчас наверху.
при наведении на кнопку:
1. запоминаем родную глубину это кнопки
2. свапим новую кнопку на верхнюю глубину
при роллауте:
1. кладём кнопку на её родную глубину (которая была запомнена при ролловере).
таким образом у тебя кнопки будут попеременно выскакивать на верхнюю глубину. а потом убираться обратно.
С этим все понятно, за что благодарен всем ответившим.
Собственно вопрос с массивом (хэшем) стэка свзяан со следующей задачей:
http://www.martini.com/home.aspx?language=international&puntos=0&screen=fullscreen&country=10int&initialSection=
там в левом нижнем углу картинки с интересным эффектом появления... Собственно, если представить такую задачу в динамическом виде (как движок для галер), то задача уже будет решаться либо деревом свопа, либо сортировкой массива стэка. В динамике дерево непотимальное решение, а вот массив стэке - это уже чтото :)
Сосбтвенно вопрос - есть ли во флэше доступ до массива стэка??
В хэлпе понятно его нет, но ведь возможно есть и другие функции, недокументированные в юзерхэлпе
Nox Noctis
16.09.2004, 16:29
обрати внимание, там их не полторы тысячи :)
а доступка к стеку как к обычному массиву - нет. но можно сделать самостоятельно. создать массив, расположить изображения по порядку по глубине, занести линки на них в массив, организовать процедуры перестановки их в массиве...
здраво.. пасиб
Кстати, еще один ньюансик разъясни плиз.
Изначально все объекты имеют свою уникальную позицию в стэке. Что будет, если им всем дать одинаковую позицию, например 0.
Визуально вроде бы все в порядке, но не будет ли какихнибудь замечтательных глюкофф?
DeliMIter
16.09.2004, 16:50
А тебе не удастся. Свап перемещает объект на заданную глубину, если она пустая, и меняет два объекта глубинами, если на заданной глубине что-то есть.
Nox Noctis
16.09.2004, 16:56
Оригинал написал(а) DeliMIter
и меняет два объекта глубинами, если на заданной глубине что-то есть. - это если ему прямо так и сказать: поменять одно с другим :)
если просто свапнуть на глубину, где уже что-то лежит, то то что там было просто сотрётся.
принцип понятен.
однако прошу обратить внимание, что в моем файле ниче не стирается
www.theabyss.ru/comandor/slider.zip
В твине, в первом фрэйме вторая функция (rollou). Я там меняю глубину ролаутного объекта на константу.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.