Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   один мувик над другим (http://www.flasher.ru/forum/showthread.php?t=136331)

Ваня Ветров 14.02.2010 23:26

один мувик над другим
 
:bye:один мувик над другим... Дано два мувика, один большой, другой маленький. Тот что маленький находится на "фоне" большого, на большом работает onRollOver и onRollOut. Когда курсор мыши заходит на маленький, на большом срабатывает onRollOut, когда курсор возвращается с маленького на большой....На большом срабатывает onRollOver. Как же сделать так что бы эти обработчики событий Большого мувика не срабатывали при наведении и убирании курсора на маленьком мувике:wacko::rtfm::umnik2::mad::cool::bye::bye::bye::bye:?

sestem 14.02.2010 23:40

? нифига не понял :)

Ваня Ветров 14.02.2010 23:47

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

zurkis 15.02.2010 00:10

если я правильно понял, то как-то так

обновил архив, можно смотреть

Ваня Ветров 15.02.2010 00:17

что то не открывается архив

spooner 15.02.2010 00:25

Если я правильно понял проблему, то надо маленький избавить от обработчиков мыши (от всех!) и будет большой все нормально обрабатывать.

mooncar 15.02.2010 00:31

Просто используйте на одном из них вместо всех обработчиков только проверку hitTest. Наведение - это когда hitTest даст true. Нажатие-отпускание (== onRelease) - проверка на hitTest + onMouseUp. И т.д.

Ваня Ветров 15.02.2010 00:32

вообще то на сколько мне известно существует команда энейблед, которая отключает у мувиклипа обработчики (on)action, но она только лишь их отключит. Для большого клипа в моем случает это не поможет, он так же буьет реагировать на маленький)

Добавлено через 51 секунду
да я вот думаю про хит тест

mooncar 15.02.2010 00:35

Не надо думать, надо делать :)
Я везде так делаю, почти не использую onRollOver, одни проблемы.
Только не забудьте, что проверку нужно непрерывно делать, или хотя бы на некоторый период, когда ваши мувики на сцене.

Ваня Ветров 15.02.2010 00:41

это как?)

mooncar 15.02.2010 00:46

Что как? Как проверку сделать непрерывной или как должна происходить сама проверка?

Ваня Ветров 15.02.2010 00:52

как проверку сделать не прерывной и как сделать что бы на большом мувике не срабатывал онролловер при наведении курсора мыши на маленький)

mooncar 15.02.2010 00:57

Убираете onRollOver с вашего "маленького" мувика. Вообще на нем не должно быть обработчиков.
Дальше. Допустим, ваш "маленький" имеет инстанс-имя на сцене mc.
Тогда эмуляция RollOver и RollOut для него с использованием hitTest будет выглядеть так:
Код AS1/AS2:

var chk:Number  = setInterval (chekFunc, 10);
var wasOver:Boolean = false ; //триггер для избежания лишних сработок
 
function chekFunc () {
        var hit:Boolean = mc.hitTest(_root._xmouse, _root._ymouse, true); //true  - чтобы точное содержимое рисованное проверялось, а не просто окаймляющий прямоугольник
 
        if (!wasOver) {
                if (hit) {
                        trace('Навели');
                        wasOver = true ;
                }
        }
        else {
                if (!hit) {
                        trace('Увели');
                        wasOver = false ;
                }               
        }
}

Когда проверка станет ненужной, можно стереть интервал:
Код AS1/AS2:

clearInterval (chk);


samana 15.02.2010 12:35

Цитата:

Сообщение от spooner (Сообщение 886475)
Если я правильно понял проблему, то надо маленький избавить от обработчиков мыши (от всех!) и будет большой все нормально обрабатывать.

Разве этот совет вам не подходит? Или маленький клип должен реагировать на события "on..."?

mooncar 15.02.2010 12:49

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

Ваня Ветров 15.02.2010 13:34

Поверх большого клипа, находится маленький)....Выше есть один исходничек на 5 килобайт), визуальный смысл в нем четко показан, thx Циркусу). Так вот в добавок
на большом висит твиин маленького. Работает это так: когда на большом сробатывает онролловер( т.е. мы наводим на него !на "большой")! курсор мыши), появляется маленький, когда курсор мыши убираем с большого, не важно убрали мы его совсем со сцены или навели на маленький клип, то на большом срабатывает онроллаут, и маленький начинает уезжать))). Как только граница маленького клипа заходит за указатель мыши), на большом вновь происходит онролловер), маленький начинает появляться, вот такие качели))))). Надо остановить все твины маленького при срабатывании обработчиков (on)на большом. То есть маленький должен оставаться на месте, когда на него с большого наводится курсор) и уводится). Все остальное время на большом онролловер и онроллаут работают как им и положенно). Интересная тема согласитесь)

mooncar 15.02.2010 14:14

Ну и используйте код, который я привел. Что-то в нем непонятно?

zurkis 15.02.2010 14:23

Ваня Ветров а можно для простоты понимания, визуально посмотреть на то что уже сделано? можно видеть исходник?

mooncar 15.02.2010 14:34

Вот вам рабочий код для двух мувиков. Допустим маленький мувик называется smallMc, большой bigMc.
Тогда в кадре пишите код:
Код AS1/AS2:

//стартуем проверку
var chk:Number  = setInterval (chekFunc, 10);
//триггеры для избежания лишних сработок
var wasOver1:Boolean = false ;
var wasOver2:Boolean = false ;
 
function chekFunc () {
        var hit1:Boolean = bigMc.hitTest(_root._xmouse, _root._ymouse, true);
        var hit2:Boolean = smallMc.hitTest(_root._xmouse, _root._ymouse, true);
        if (!wasOver1) {
                if (hit1) {
                        trace('Навели курсор на большой');
                        wasOver1 = true ;
                }
        }
        else {
                if (!hit1) {
                        trace('Увели курсор с большого');
                        wasOver1 = false ;
                }               
        }
 
        if (!wasOver2) {
                if (hit2) {
                        trace('Навели курсор на маленький');
                        wasOver2 = true ;
                }
        }
        else {
                if (!hit2) {
                        trace('Увели  курсор с маленького');
                        wasOver2 = false ;
                }               
        }       
}

Вместо trace пишите в соответсвенных местах вашу анимацию исчезновения - появления. Всё! Кладите мувики как вам хочется - хоть один над другим, хоть наооборот, хоть где.

Ваня Ветров 15.02.2010 16:12

По этому срипту(!hitTest!) все работает как в нем и прописано. НО! Осталась одна маленькая и очень важная ерунда). Уж извините пожалуйста, что отнял время и силы и видимо еще и НЕРВЫ). Не со зла). Один ньюанс.... . Как мне при наведении курсора с большого клипа на маленький клип, отключить(остановить) твин (движение) маленького клипа, прописанное на роллауте(ролловере) большого?


то есть...

bigMc.onRollOver = function()

{var img_Tween:Tween = new Tween(smallMc, "_y",Regular.easeOut, smallMc._y,2, 1, true);};
bigMc.onRollOut = function()
{var img_Tween11:Tween = new Tween(smallMc,"_y", Regular.easeOut,smallMc._y,-60, 1, true);

вот...навожу курсор мыши на small mc и сробатывает bigMc.onRollOut. small mc уезжает) вверх. А нужно что бы smallMc оставался на месте). И наоборот, когда, курсор с smallMc переходит на bigMc, сробатывает bigMc.onRollOver(вообще smallMc в этот момент дергается)), smallMc где бы он ни находился начинает движение сверху, то есть с тех координат какие заданы в твине. А должен стоять на месте). Все осталное время bigMc.onRollOut и bigMc.onRollOver работают как им и положенно, то есть при убирании и наведении курсора на сцену smallMc появляется и убирается. Вот и вся заморочка) На самом деле мне не так уж и смешно как можно подумать в первый раз. Сижу уже неделю над этой проблемой, столько всего поначитался , да понасмотрелся. Есть какое ни будь очевидное или пусть даже не очевидное решение этой проблемы?)

samana 15.02.2010 16:46

Что бы остановить твин, нужно переменной твина сказать
Код AS1/AS2:

my_Tween.stop()

Читал не один раз этот пост, но не могу с уверенностью сказать, что вы делаете и что вам нужно.

Ваня Ветров 15.02.2010 17:01

my_Tween.stop() уже пробывал, два дня назад, почему то не работает) Ты не знаешь случайно?)

samana 15.02.2010 17:13

Может проблема с адресацией. Так как переменная твина создалась в клипе BigMc,(потому что было слово var) то что бы обратится к ней надо прописать путь.
Код AS1/AS2:

smallMc.onRollOver=function(){
BigMc.img_Tween.stop()
}


Ваня Ветров 15.02.2010 17:29

MoonWalker), работает то твой код. Только вот не с первого раза регистрируется событие почему то. А именно уход курсора мыши из области сцены. Загрузка... На сцене, "главный" bigMc, он во весь ее размер) на его фоне smallmc. Когда навожу на smallmc, вроде бы все четко регистрируется, выдается сообщение что навел на маленький, и так далее...дальше еще дальше). В общем надо бы что ни будь что проверяет наличее событий по чаще и поточнее. А то получается только с левого края bigMc происходит событие ухода курсора мыши за пределы сцены. Пока так вот только работает(. У) За пример с хиттестом Лунный пешеход - спасибо.

Добавлено через 2 минуты
такое до меня не доперло) хххе, ну щас попробую. А так пока лунного пешехода вариант самый куул, правдо, пока с одним недостатком.

mooncar 15.02.2010 17:41

Выставьте FPS 30 или выше.

FRAG 15.02.2010 18:17

а нельзя было заюзать одну переменную, которая бы менялась с фалс на тру при хите с мелким мувиком, и блокировала весь скрипт для большого мувика при фалсе, а скрипт для bigМс занести в рамки условия: иф(наша переменная == фалс){работать}

Ваня Ветров 15.02.2010 20:29

FRAG. Идея такая была...) и даже писал ее, но что то где то не корректо сочиталось. Вариант Лунного пешехода самый кууууууул, с небольшой оговоркой. В нем кажется даже будет достаточно захитить большой клип. Покрайней мере при наведении на еще один маленький)(smallmc2 так сказать), наблюдается тот же эффект что и спервым маленьким)(smallmc). В общем что то у меня так и работает не коректо. Кстати FPS 30 у меня и было). еще что ни будь можно сделать кроме поднятия фпс?

Добавлено через 2 часа 57 минут
не работает smallMc.onRollOver=function(){
BigMc.img_Tween.stop()
}
А вот с .hitTest(), наверное такой глюк из за медленной работы процессора).


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

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