PDA

Просмотр полной версии : Помогите сделать меню


mre
21.01.2008, 22:58
В общем делаю меню следующее (файл прикрепляю).
Долго мучаюсь уже. Получается сделать красиво только если пункт выбирать мышкой сверху или снизу, а если с выбранного пункта переходить на соседний - никак не могу придумать как реализовать чтобы нормально работало, у меня уже все идеи кончились. Может у кого есть подобная swf чтобы код глянуть или кто-нить сталкивался с таким и может подсказать алгоритм, swf прикрепляю, при необходимости могу выложить fla.
Заранее спасибо! Очень нужно, помогите плиз!
Весь код ниже:

stop();
var count = 17;
var block = false;
var diff = 158;
var koef = Math.ceil(diff / count);
var speed = 1;
var base_width = 214;
var mask_base_x = 158;
function update_params(clip, body_width, clip_id, selected_id)
{
clip.interval2 = setInterval (function(clip, body_width, clip_id, selected_id)
{
speed2 = _root.speed;
if ((body_width >= clip.body._width - (speed2 - 1)) && (body_width <= clip.body._width + (speed2 - 1)))
{
clip.body._width = body_width;
clip.body2._width = body_width;
if (body_width == _root.base_width)
clearInterval(clip.interval2);
}
else
if (body_width > clip.body._width)
{
clip.body._width = clip.body._width + speed2;
clip.body2._width = clip.body2._width + speed2;
if (clip_id > selected_id)
{
_root["a"+selected_id].body._x = _root["a"+selected_id].body._x - speed2;
_root["a"+selected_id].body2._x = _root["a"+selected_id].body2._x - speed2;
}
else
{
_root["a"+selected_id].mask._x = _root["a"+selected_id].mask._x + speed2;
}
if (clip_id > selected_id)
{
for (i = selected_id + 1; i <= clip_id; i++)
{
_root["a"+i].body._x = _root["a"+i].body._x - speed2;
_root["a"+i].body2._x = _root["a"+i].body2._x - speed2;
_root["a"+i].mask._x = _root["a"+i].mask._x - speed2;
}
}
else
{
for (i = clip_id + 1; i < selected_id; i++)
{
_root["a"+i].body._x = _root["a"+i].body._x + speed2;
_root["a"+i].body2._x = _root["a"+i].body2._x + speed2;
_root["a"+i].mask._x = _root["a"+i].mask._x + speed2;
}
}
}
else
{
clip.body._width = clip.body._width - speed2;
clip.body2._width = clip.body2._width - speed2;
if (clip_id > selected_id)
{
_root["a"+selected_id].body._x = _root["a"+selected_id].body._x + speed2;
_root["a"+selected_id].body2._x = _root["a"+selected_id].body2._x + speed2;
}
else
{
_root["a"+selected_id].mask._x = _root["a"+selected_id].mask._x - speed2;
}
if (clip_id > selected_id)
{
for (i = (selected_id + 1); i <= clip_id; i++)
{
_root["a"+i].body._x = _root["a"+i].body._x + speed2;
_root["a"+i].body2._x = _root["a"+i].body2._x + speed2;
_root["a"+i].mask._x = _root["a"+i].mask._x + speed2;
}
}
else
{
for (i = clip_id + 1; i < selected_id; i++)
{
_root["a"+i].body._x = _root["a"+i].body._x - speed2;
_root["a"+i].body2._x = _root["a"+i].body2._x - speed2;
_root["a"+i].mask._x = _root["a"+i].mask._x - speed2;
}
}
}
}, 20, clip, body_width, clip_id, selected_id);
}

count = 17;
elems = [];
e_width = 56;
e_interval = 2;

for (var k = 1; k <= _root.count; k++)
{
_root['a'+k].onRollOver = function()
{
item = Number(this._name.substr(1,this._name.length-1));
for (i = 1; i <= _root.count; i++)
{
clearInterval(_root["a"+i].interval2);
if (i != item)
update_params(_root["a"+i],_root.base_width - _root.koef + 1,i,item);
}
}
_root['a'+k].onRollOut = function()
{
item = Number(this._name.substr(1,this._name.length-1));
for (i = 1; i <= _root.count; i++)
{
clearInterval(_root["a"+i].interval2);
if (i != item)
{
update_params(_root["a"+i],_root.base_width,i,item);
}
}
}
}

MrPoma
21.01.2008, 23:17
ничего не понятно

mre
21.01.2008, 23:37
Да просто глянте прикрепленный файл, может где видели подобное, мне бы хотя бы образец.

D12
21.01.2008, 23:48
Пример (http://www.flasher.ru/forum/showpost.php?p=652541&postcount=47)
Только там горизонтальное меню

Aisaid
22.01.2008, 15:28
тема аналогичная
ктонибудь знает алгоритм движения как в меню: http://www.netpro.ru/?action=DABlank2
понимаю как считывать контекст меню из файла, как создавать пункты, применять функции
а вот не могу понять как все эти пункты так интерактивно, с инерцией реагируют на сдвижку/увеличение размера
помогите плиз

Fernando Costa
22.01.2008, 16:39
видимо на обычных Tween-ах там все.

Aisaid
22.01.2008, 17:11
Fernando Costa, я тоже мог бы так предположить
а поконструктивней ничего нет?
как именно могут эти твины между собой взаимодействовать?

Fernando Costa
22.01.2008, 18:09
в событии онМоушнЧенжед расставляешь все остальные мувики в соответствии с новыми размерами мувика на которого действует твин. Вот и все батенька

mre
22.01.2008, 18:32
Да, прикольно все это, спасибо за образцы менюшек.

Aisaid
22.01.2008, 19:58
в событии онМоушнЧенжед расставляешь все остальные мувики в соответствии с новыми размерами мувика на которого действует твин. Вот и все батенька

ты сам-то представляешь что предлагаешь? :quiet:
это нужно массив с координатами пересчитывать до тех пор пока последняя из строк не станет на своё место... тормоза будут нереальные, и к тому же как ты будешь определять, по очереди? стали ли все ячейки на своё место...

нужно что-то другое :umnik2:

Fernando Costa
22.01.2008, 20:15
предлагай свой "гениальный план действий", в моем варианте тормозить не будет