PDA

Просмотр полной версии : Как реализовать меню?


Damira
07.03.2006, 01:01
Мне дали следующее описание меню:
"На странице пульсируют квадраты меню. При этом по очереди квадраты увеличиваются. После того, как квадрат достиг своего максимального размера, вся система останавливается, а на выделенном квадрате появляется название раздела. Потом обрат и к другому квадрату.

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

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

Nidl
07.03.2006, 01:23
чтобы тебе помочь интересует один вопрос ты собираешся картинки грузить из вне или держать в самой флешке ?
ну само сабой какой версией флеша ты пользуешся ?
это ктому в какой примеры делать.

P.S. проверку есть ли мышь над квадратом можно делать 3 вариантами
1. (нестобилен) проверка на onRollOut и onRollOver. в твоем примере использовать вообще нерекомендую , на счет этого я еще с iNilsam спорил .
2. проверка на хит тест , для прямоугольных обьектов само великолепие )
3. мой любимый , проверка координат, очень стабилен .

Antares
07.03.2006, 01:52
1. Это чем же он нестабилен?:)
2. А что, для непрямоугольных чем-то хуже?:)
3. О да, особенно для некруглых и непрямоугольных вариантов...

Король
07.03.2006, 01:56
автор жжот. других слов у меня нет, сорри

Nidl
07.03.2006, 02:00
2Antares для нерямоугольных нужно хит тест с гетбаунсом обьединять , одним хиттестом не ограничешся .

P.S. Ты ведь знаеш все это чего смеешся ?

K.A.T.A.F.A.L.K.E.R
07.03.2006, 02:49
детский вариант решения (если правильно понял задачу): к примеру, если в меню будет N элементов, а сама анимация "увеличение-уменьшение" занимает m кадров, отступаем (N-1)*m кадров от начала а дальше лепим саму анимацию. Скрипт после такого приобретает вид вроде
for(var i:Number=0;i<5;i++){
_root.attachMovie("mov","mov"+i,i);
_root["mov"+i]._x = (_root["mov"+i]._width+20)*i + 100;
_root["mov"+i]._y = 100;
_root["mov"+i].gotoAndPlay(80-i*20);
_root["mov"+i].onEnterFrame = function(){
if(this._currentframe==90 && this.hitTest(_xmouse,_ymouse,true))
for(var i in _root)
_root[i].stop();
}
_root["mov"+i].onRollOut = function(){
for(var i in _root)
_root[i].play();
}
_root["mov"+i].onReleaseOutside = _root["mov"+i].onRollOut;
}

Damira
07.03.2006, 02:56
чтобы тебе помочь интересует один вопрос ты собираешся картинки грузить из вне или держать в самой флешке ?
ну само сабой какой версией флеша ты пользуешся ?
это ктому в какой примеры делать.

версия MX.
картинки будут лежать во флешке.
1. (нестобилен) проверка на onRollOut и onRollOver. в твоем примере использовать вообще нерекомендую , на счет этого я еще с iNilsam спорил .
Так и не вышло же. Спора вашего я не видела, но это первое, что пришло в голову. И не особо удачное, так как сама же и запуталась в реализации
2. проверка на хит тест , для прямоугольных обьектов само великолепие ).
А что это значит?
3. мой любимый , проверка координат, очень стабилен .
А это идея... и замечательная!
Попробую

Damira
07.03.2006, 02:59
Не совсем так. Дергающиеся квадраты (они еще и в пространстве "колбасятся") должны останавливать свою пульсацию, если мышка над одним из квадратов. и опять продолжать движение, если мышка убрана.

Antares
07.03.2006, 03:09
Тут просто представить себе что-то лучше класса с onRollOver / onRollOut сложно, какие проверки координат...

Antares
07.03.2006, 03:10
P.S. Ты ведь знаеш все это чего смеешся ?
Да потому что вы пытаетесь почесать пяткой ухо, хотя руки у вас развязаны.

Nidl
08.03.2006, 19:27
2Damira

ты здесь )

вот примеры один под 8й другой под 6й )

посмотри подправь если что не так понял но вроде все так )

zz = 0;
for (var i:Number = 0; i<4; i++) {
_root.attachMovie("kvadrat", "kvadrat"+i, i+3);
_root["kvadrat"+i]._x = 275;
_root["kvadrat"+i]._y = 60*i+30;
//60 - интервал , 30 исходная точка первого.
_root.attachMovie("kvadrat", "kvadrat5", 1);
_root.kvadrat5._x = 275;
_root.kvadrat5._y = 120;
_root.kvadrat5._xscale = 200;
_root.kvadrat5._yscale = 800;
_root.kvadrat5.onEnterFrame = function() {
myColor = new Color(this);
myColor.setRGB(0xFFFFFF);
this._alpha = 80;
};
_root.onEnterFrame = function() {
_root.d = 0;
if ((_root._xmouse>=(_root.kvadrat5._x-30)) && (_root._xmouse<=(_root.kvadrat5._x+30)) && (_root._ymouse>=(_root.kvadrat5._y-120)) && (_root._ymouse<=(_root.kvadrat5._y+120))) {
_root.d = 12;
if (_root.d == 12) {
zzz = 1;
zzz1 = 1;
zzz2 = 1;
zzz3 = 1;
}
}
zz += 1;
if (zz == 1) {
zzz = 1;
}
if (zz == 10) {
zzz1 = 1;
}
if (zz == 20) {
zzz2 = 1;
}
if (zz == 30) {
zzz3 = 1;
}
if (zz == 39) {
zz = 0;
}
};
_root.kvadrat0.onEnterFrame = function() {
if (zzz == 1) {
if (this._xscale<120) {
this._xscale = this._yscale += 2;
if (this._xscale == 120) {
zzz = 2;
}
}
}
if (zzz == 2) {
if (this._xscale>100) {
this._xscale = this._yscale -= 2;
if (this._xscale == 100) {
zzz = 0;
}
}
}
};
_root.kvadrat1.onEnterFrame = function() {
if (zzz1 == 1) {
if (this._xscale<120) {
this._xscale = this._yscale += 2;
if (this._xscale == 120) {
zzz1 = 2;
}
}
}
if (zzz1 == 2) {
if (this._xscale>100) {
this._xscale = this._yscale -= 2;
if (this._xscale == 100) {
zzz1 = 0;
}
}
}
};
_root.kvadrat2.onEnterFrame = function() {
if (zzz2 == 1) {
if (this._xscale<120) {
this._xscale = this._yscale += 2;
if (this._xscale == 120) {
zzz2 = 2;
}
}
}
if (zzz2 == 2) {
if (this._xscale>100) {
this._xscale = this._yscale -= 2;
if (this._xscale == 100) {
zzz2 = 0;
}
}
}
};
_root.kvadrat3.onEnterFrame = function() {
if (zzz3 == 1) {
if (this._xscale<120) {
this._xscale = this._yscale += 2;
if (this._xscale == 120) {
zzz3 = 2;
}
}
}
if (zzz3 == 2) {
if (this._xscale>100) {
this._xscale = this._yscale -= 2;
if (this._xscale == 100) {
zzz3 = 0;
}
}
}
};
}

PIRIS
09.03.2006, 17:17
Antares он полностю прав. Все гениальное просто!
Используйте обработчики onRollOut и onRollOver

Nidl
09.03.2006, 19:25
Используйте обработчики onRollOut и onRollOver

Допустим ты сделал так повесил на кнопку команды на ее нажатие , и показываеш покупателю , он наводит мышкой на твое меню все круто меню изменилось нажимает кнопку и резко удаляет мышь за пределы поля флешки и вообще кнопку неотпускает , что мы видим а ничего хорошего при таком раскладе onRollOut несрабатывает , неспорю как когда-то говорил мне iNils ето вполне нормально для флеша , но ненормально для "товара" .

а так ты получишь более высокую точность .

if ((_root._xmouse>=(_root.meny._x-30)) && (_root._xmouse<=(_root.meny._x+30)) && (_root._ymouse>=(_root.meny._y-120)) && (_root._ymouse<=(_root.meny._y+120))) {

P.S. еще вопросы есть ?

Damira
22.03.2006, 01:56
Есть.
Все классно останавливается, но нифига не движется дальше после убирания мышки

BABU
01.05.2006, 01:16
Может штото типа этого

ЗЫ:c интервалами по шаманить над