PDA

Просмотр полной версии : Как сделать что бы один мувик работал под другим?


Kookla
28.09.2006, 01:33
Есть карта, на которая разбита на регионы. ПРи наведении на регион должна появлять надпись что это такое и сам регион должен менять цвет. Так же должны появляться точки, обозначающие города. При наведении на точку должна возникать надпить говорящая что это за город. Подскажите, плз, как это можно сделать. Если подобная тема уже была, киньтесь ссылочкой. спасибо.

miramax
28.09.2006, 02:11
Сложно так сразу сообразить и ответить на всё сразу. Тема всеобъемлющая.
Если подобная тема уже была, киньтесь ссылочкой
http://www.google.com/search?hl=ru&q=flash+&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=
По этой ссылке я нашёл более 1 000 000 000 результатов. Там наверное и туториалы, и исходники, и доки... Короче крутой ресурс. :)

Dendroid
28.09.2006, 04:08
Основной принцип простой: при наведении на регион пусть вызывается функция вроде этого: "showRegion(n);" А при наведении на город вызывается 2 функции: "showRegion(n);showCity(k);", тогда и регион, относящийся к городу, останется подсвеченным, хотя rollOver уже ушёл на город.
Дальше объяснять? :)

miramax, зачем ты так?

Kookla
28.09.2006, 08:59
объяснять, если не сложно по подробнее, ибо я пока еще не сильно в ладах со флешем. =о)

kayama
28.09.2006, 10:17
rollOver на область - делаем анимацию перекарски и появления названия области, + появление точек городов.
rollOver на точку - делаем анимацию появленеия надписи в самом мувике с точкой, либо аттач с Alt Hint, котрый будет прикреплен к курсору мыши..

rollOut`ы - соответственно.

Kookla
28.09.2006, 16:20
пробовал. RollOver на области перекрывает тот что на городе и город не срабатывает.

Хемуль
28.09.2006, 17:52
2 Kookla:
А как мувиклип города у вас размещён относительно мувиклипа области?

Kookla
28.09.2006, 22:31
внутри мувиклипа области

Хемуль
28.09.2006, 23:46
2 Kookla:
А обязательно так делать? о_0
У вас области просто цвет изменяют или ещё и увеличиваются при наведении на них мыши? Если просто изменяют цвет, то вам ничего не мешает просто разместить мувиклипы городов над мувиклипом области с каким-то смещением относительно верхнего левого угла области...
Если карта вроде такой, как тут: http://mygolfparty.com (делал когда-то для клиента, который занимается турнирами по гольфу), то вам не обязательно запихивать города в области...

Kookla
29.09.2006, 09:14
похожа, только при наведении должны появляться еще и города.
http://subway.ru/e/restaurants_map.html вот так карта выглядит сейчас. мне нужно туда города посадить. как?=о)

sem1313
29.09.2006, 10:14
Да не важно... Внутри ли мувики или снаружи... От каких-то мы все равно событий не будем получать...

Я тоже столкнулся с такой траблой впервые...

Если сделать, что фон будет при наведении основных точек, то фон будет терять ОНРОЛЛ при наведении на Города... и при на ведении на Города фонн будет терять онРолл...

Это бы не страшно если все сделанно без анимации... но когда при eventa'h используешь события наведения и отведения, то черт его знает, что делать... Сам уже намучился... Нашел обходной путь, но не стабильный, через onEnterFrame... Такой гемор получается... Блин...

Вот с этим Adob'овцы забыли разобраться... Ведь достаточно случаев, когда наводишь на мувик, когда он находиться над другим... И когда нухно, что бы "нижний" не терял фокуса...

kayama
29.09.2006, 10:34
А если сделать, чтобы при нажатии на область появлялись города, область, в этом случае, остается подсвеченной и ролл на городах работает...

sem1313
29.09.2006, 10:56
В том то и дело что ни каких нажатий не должно происходить(Как я понимаю)... Иначе бы все было гораздо проще...

Должны быть только Роллы...

dantist86
30.09.2006, 01:27
Очень похоже:
http://weblancer.net/projects/10009.html

Kookla
30.09.2006, 02:37
Нажатий так быть не должно, только когда пользователь захочет перейти на страницу региона, он щелкнет и пройдет поссылке, но с этим я разобрался=о)

Хемуль
30.09.2006, 05:32
2 Kookla:
Можно работать и с мувиклипами внутри других мувиклипов. Например, использовать hitTest.
Взгляните: http://flasher.ru/forum/showthread.php?t=85789

Kookla
30.09.2006, 12:56
это то что нужно=ог) спасибо, только еще вопросы:
1) Как изменить положение этих мнопок в примере, вообще чем оно контролируется
2) мне нужно сделать множество таких, как описать это?
3) как вы проименовали кадры?=о) давно пытаюсь найт это, не получается. мануалка не помогла=о) flash 8

Хемуль
01.10.2006, 00:03
2 Kookla:
1) Кнопка кладётся на сцену строкой:

this.attachMovie("button", "button", this.getNextHighestDepth(), {_x:100, _y:100});

Взгляните на последний параметр функции:

{_x:100, _y:100}

Это обьект, который осуществляет начальную инициализацию свойст созданного обьекта button.
Выпадающая кнопка, соответственно, выкладывается:

var dropDownClip:MovieClip = this.attachMovie("dropDown", "dropDown", this.getNextHighestDepth(), {_x:0, _y:this._height});

Тут то же самое. Как видите, выпадайка присоединяется внутрь мувиклипа кнопки в координатах (0, this._height). То есть, в локальных координатах мувиклипа кнопки выпадайка смещена вниз на величину равную высоте кнопки в пикселях.
Можно и не делать начальную инициализацию свойств _x и _y в самой функции. Тогда они будут иметь значения по умолчанию - (0, 0). Установить эти значения можно и после создания мувиклипа:

this.attachMovie("button", "button", this.getNextHighestDepth());
this.button._x = 100;
this.button._y = 100;


2) Массивом, конечно же. И в цикле добавлять эти самые кнопки со смещением по y так, чтобы следующая располагалась под предыдущей. И в цикле же задавать события на эти мувиклипы. Но тут могут быть некоторые ньюансы...

3) Когда вы в редакторе выделяете кадр, на панели Properties появляются свойства кадра. Там можно выставить Frame Label.

Kookla
02.10.2006, 00:24
какие нюансы?

Kookla
02.10.2006, 11:40
Не могу понять как прописать, что бы кнопок для нажимания появлялось больше. где что прописать. У меня получилось что вторая кнопка для нажимания получилась неактивной.

Хемуль
02.10.2006, 13:53
2 Kookla:
Ох... Давайте сформируем для себя некоторую терминологию, чтобы не путаться... Давайте назовём основную кнопку... "Кнопкой", а выпадающие кнопки будем называть "кнопками-выпадайками" или "кнопками меню". Лучше первое...
Так вот... У вас неактивная вторая кнопка-выпадайка? Может вы забыли назначить для неё события?

Kookla
02.10.2006, 14:10
скорее всего. а как это сделать?

Хемуль
02.10.2006, 14:22
2 Kookla:
В цикле созданным кнопкам определять события...
Я вечером вам напишу пример, который скорее всего вас удовлетворит...

sem1313
02.10.2006, 19:21
Вы мне покажите исходник, в которм нормально обрабатываются РОЛЛЫ клипов над одним большим клипом, который сам имеет РОЛЛ, и что бы он не терял ролла(функции при нведении) при наведении на клипы над ним...

Оч интересно...

Kookla
02.10.2006, 22:42
мне самому интересно=о))

Хемуль
02.10.2006, 22:50
2 sem1313:
Я покажу обработку "роллов" на мувиклипы, которые находятся внутри одного большого мувиклипа, имеющего onRollOut...

2 Kookla:
Сперва создаём в библиотеке мувиклипы кнопки и кнопок-выпадаек. Внутри обоих этих мувиклипов создаём мувиклип label, в котором содержится текстовое поле с именем caption. Это текстовое поле будет отвечать за подписи на кнопках. Можно было не вкладывать текстовое поле в мувиклип label, но я это делаю для гибкости на случай, если в будущем вам захочется сделать не просто изменение цвета надписи на кнопках, но и более сложные эффекты.
Итак, отталкиваясь от моего прошлого примера, который вы видели, пишем скрипт в первом кадре сцены:

var buttonHeight:Number = 24;
var buttonCaption:String = "НАВОДИТЬ СЮДА"
var buttonX:Number = 100;
var buttonY:Number = 100;

var dropDowns:Array = new Array();
dropDowns.push("ПУНКТ 1");
dropDowns.push("ПУНКТ 2");
dropDowns.push("ПУНКТ 3");
var dropDownHeight:Number = 24;

var dropDownTextColor:Number = 0x000000;
var dropDownHoverTextColor:Number = 0xFF0000;

this.attachMovie("button", "button", this.getNextHighestDepth(), {_x:buttonX, _y:buttonY});
this.button.label.caption.text = buttonCaption;
setColor(this.button.label, dropDownTextColor);

function setColor(MC:MovieClip, colorToSet:Number)
{
var newColor:Color = new Color(MC);
newColor.setRGB(colorToSet);
}

this.button.onRollOver = function()
{
setColor(this.label, dropDownHoverTextColor);
var dropDownsLength:Number = dropDowns.length;
for (var index:Number = 0; index < dropDownsLength; index++)
{
var newDropDownName:String = "dropDown" + index;
var dropDownClip:MovieClip = this.attachMovie("dropDown", newDropDownName, this.getNextHighestDepth(), {_x:0, _y:buttonHeight + index * dropDownHeight});
setColor(dropDownClip.label, dropDownTextColor);
dropDownClip.label.caption.text = dropDowns[index];
dropDownClip.id = index;
}
}

this.button.onRollOut = this.button.onReleaseOutside = function()
{
setColor(this.label, dropDownTextColor);
var dropDownsLength:Number = dropDowns.length;
for (var index:Number = 0; index < dropDownsLength; index++)
{
var dropDownName:String = "dropDown" + index;
this[dropDownName].removeMovieClip();
}
}

this.button.onMouseMove = function()
{
var dropDownsLength:Number = dropDowns.length;
for (var index:Number = 0; index < dropDownsLength; index++)
{
var dropDownName:String = "dropDown" + index;
var dropDownTextNewColor:Number;
if (this[dropDownName].hitTest(this._parent._xmouse, this._parent._ymouse, true))
{
dropDownTextNewColor = dropDownHoverTextColor;
}
else
{
dropDownTextNewColor = dropDownTextColor;
}
setColor(this[dropDownName].label, dropDownTextNewColor);
}
}

this.button.onPress = function()
{
var dropDownsLength:Number = dropDowns.length;
for (var index:Number = 0; index < dropDownsLength; index++)
{
var dropDownName:String = "dropDown" + index;
if (this[dropDownName].hitTest(this._parent._xmouse, this._parent._ymouse, true))
{
trace("Pressed: " + dropDowns[this.id]);
}
}
}

Функция setColor определена для удобства.
Исходник прикрепляю.
Будут вопросы, спрашивайте...