Просмотр полной версии : Цепочка видимости мувиклипа
AzagThoth
03.11.2009, 20:22
Здравствуйте, вчера тут обсуждался интересный вопрос.
Ссылка на тему - http://www.flasher.ru/forum/showthread.php?t=132017
Пытаюсь разобраться с цепочками видимсти мувиклипов если они вложены друг в друга.
Обнаружил, что функции onRollOver и onRollOut "верхнего" затирают функции вложенного мувиклипа, что мне очень не нравится и как следствие в теории многие задачи когда необходимо отслеживать эти события для цепочки вложенных мувиклипов становятся невыполнимыми.
Вопрос, каким образом обойти эту бяку?
Определять hitTest'ом над каким мувиком находится курсор.
ps: Судя по вашим постам, вы только начинаете изучение, поэтому советую начать с AS3. Подобные вопросы отпадут сами собой.
AzagThoth
03.11.2009, 21:28
Да, я действительно только начинаю изучение AS. Начал с книжки Гурского т.к. видел хорошие отзывы о ней и в целом, пока не разачарован. Не понимаю почему плохо начинать с AS2, ведь так будет больше знаний и приёмы с AS2 тоже пригодится могут... наверное. По вопросу написанному выше - я действительно как ни силюсь не могу понять почему методы верхнего мувиклипа блокирует методы вложенного. Другими словами onPress верхнего клипа блочит onPress вложенного.. По моему это весьма актуалный вопрос!
Верхний.onPress=function(){
trace(123);
}
Верхний.Нижний.onPress=function(){
trace(321);
}
В Output всегда видим '123'. Пожалуйста помогите разобраться.
____
А... !! Всё, udaff - огромное спасибо! Разобрался!
Надо делать так:
Верхний.onPress=function(){
if(this.Нижний.hitTest(_xmouse,_ymouse)==true){
trace(321);
}
else{
trace(123);
}
}
Molecula
03.11.2009, 21:36
Не вешай на верхние. Вешай на нижние.
Верхний.Нижний1.onPress=function(){
trace(123);
}
Верхний.Нижний2.onPress=function(){
trace(321);
}
AzagThoth
03.11.2009, 21:42
Спасибо конечно, но тут немного иная ситуация... Проверка на события когда есть один(1) мувиклип верхнего уровня и один(1) вложенный в него...
Molecula
03.11.2009, 21:56
Ну, есть папа и сын.
Папа суетливый и сын.
А если спихнуть суетливость папы за счет добавления второго сына, но прозрачного, что бы другой был виден.
Т.е. функции верхнего перенести на второй вложенный?
AzagThoth
03.11.2009, 22:26
Попробовал... В случае с onRollOut и onRollOver не получается решить задачу. Вообще никак не получается не через hitTest() не через создание второго вложенного мувиклипа :( Посмотрите, пожалуйста исходник.
e1.filters = [new flash.filters.BlurFilter(10, 10, 1)];
import flash.filters.BlurFilter
var blur:Number = 10;
e1.sym.onRollOut = function(){
blur = 0
e1.onEnterFrame = function(){
e1.filters = [new BlurFilter(blur,blur,1)];
if((blur+=1)>=10) delete e1.onEnterFrame;
}
}
e1.sym.onRollOver = function(){
e1.onEnterFrame = function(){
e1.filters = [new BlurFilter(blur,blur,1)];
if((blur-=1)<=0) {
e1.filters = null;
delete e1.onEnterFrame;
}
}
}
function zoomIn() {
this.onEnterFrame = function() {
if (this._yscale<100) {
this._yscale += 5;
}
};
}
function zoomOut() {
this.onEnterFrame = function() {
if (this._yscale>10) {
this._yscale -= 5;
}
};
}
e1.ee.onRollOver = zoomOut;
e1.ee.onRollOut = zoomIn;
Когда наступает событие у "второго сына", то уходит фокус с "первого сына".
Соотвественно в данном примере гараж тут же мутнеет...
hitTest() здесь применить не представляется возможным так как если будет только отец и сын, то onRollOut захватив верхний мувиклип не сработает когда мыша достигнет вложеного клипа... Совсем муть какая-то...
AzagThoth
03.11.2009, 22:34
Ура! Получилось!!
e1.filters = [new flash.filters.BlurFilter(10, 10, 1)];
import flash.filters.BlurFilter;
var blur:Number = 10;
e1.sym.onRollOut = function() {
if (e1.ee.hitTest(_xmouse, _ymouse) != true) {
blur = 0;
e1.onEnterFrame = function() {
e1.filters = [new BlurFilter(blur, blur, 1)];
if ((blur += 1)>=10) {
delete e1.onEnterFrame;
}
};
}
};
e1.sym.onRollOver = function() {
e1.onEnterFrame = function() {
e1.filters = [new BlurFilter(blur, blur, 1)];
if ((blur -= 1)<=0) {
e1.filters = null;
delete e1.onEnterFrame;
}
};
};
function zoomIn() {
this.onEnterFrame = function() {
if (this._yscale<100) {
this._yscale += 5;
}
};
}
function zoomOut() {
this.onEnterFrame = function() {
if (this._yscale>10) {
this._yscale -= 5;
}
};
}
e1.ee.onRollOver = zoomOut;
e1.ee.onRollOut = zoomIn;
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.