Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Как сделать что бы один мувик работал под другим? (http://www.flasher.ru/forum/showthread.php?t=85683)

Kookla 28.09.2006 01:33

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

miramax 28.09.2006 02:11

Сложно так сразу сообразить и ответить на всё сразу. Тема всеобъемлющая.
Цитата:

Сообщение от Kookla
Если подобная тема уже была, киньтесь ссылочкой

http://www.google.com/search?hl=ru&q...1%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

Вложений: 1
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 определена для удобства.
Исходник прикрепляю.
Будут вопросы, спрашивайте...


Часовой пояс GMT +4, время: 19:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.