Форум 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)
-   -   Как всегда HELP!! Вопрос по поводу MovieClip'ов (http://www.flasher.ru/forum/showthread.php?t=71301)

ZooMer 02.11.2005 09:50

Как всегда HELP!! Вопрос по поводу MovieClip'ов
 
Проблема вот в чем:
Есть объект, который содержит в себе еще кучу объектов. В частности другой, который должен реагировать на наведение.
Код первого:

onClipEvent (mouseDown) {
this.onPress = function () {
startDrag (this);
s=1;
}

}
onClipEvent (mouseUp) {
stopDrag ();
s=2;
}
onClipEvent (enterFrame) {
if (s==1 and (this._alpha <= 100 or this._alpha > 100) and this._alpha > 50) {
this._alpha -= 3;
}
if (s==2 and this._alpha < 100 and this._alpha >= 40) {
this._alpha += 3;
}

this.useHandCursor = false;

}

Код второго (вложен на 1 уровень вниз, относительно первого):
onClipEvent (enterFrame) {
this.onRollOver = function () {
trace ("onRollOver called");
}
this.onRollOut = function () {
trace ("onRollOut called");
}
}

Глюк в том, что стоит кликнуть в любой области экрана, и после этого trace не выводится.
Работает только перетаскивание (тут без косяков).
Я предпологаю, что это вызвано тем, что после команды this.onPress = function () объект конвертируется в кнопку, а в кнопке заменяются имена на какие-то другие.
Есть ли какие-либо операторы, позоляющие конвертировать тип объекта? Или же по-другому реагировать на Press?
Помогите пожалуйста - со вчерашнего дня бьюсь... Уже всю пачку скурил.

maelstorm 02.11.2005 10:36

попробовал. Действительно при использовании события onPress клип, по всей видимости, получает свойства кнопки, а внутрь нее обратиться нельзя.

вот этот код рабочий:
Код:

var s:Number = null;
outter.onMouseDown = function() {
        if (this.hitTest(_root._xmouse, _root._ymouse, false)) {
                startDrag(this);
                s = 1;
        }
};
outter.onMouseUp = function() {
        stopDrag();
        s = 2;
};
outter.onEnterFrame = function() {
        if (s == 1 and (this._alpha <= 100 or this._alpha > 100) and this._alpha > 50) {
                this._alpha -= 3;
        }
        if (s == 2 and this._alpha < 100 and this._alpha >= 40) {
                this._alpha += 3;
        }
};
this.outter.inner.onRollOver = function() {
        trace("onRollOver called");
};
this.outter.inner.onRollOut = function() {
        trace("onRollOut called");
};

соответственно: outter - внешний клип, inner - вложенный

ZooMer 02.11.2005 11:58

Спасибо....но это не совсем то....у меня объект круглый, а вот эта строчка "this.hitTest(_root._xmouse, _root._ymouse, false)" делает рабочую область квадратной.
Этот способ приходил мне в голову, но убедившись, что он мне не нужен, я отбросил его.
Но все равно спасибо...
Может, еще что-то можно сделать?
Что если каждый кадр говорить кнопке, что она MovieClip? Или как-нить сделать так, чтобы она вообще не конвертировалась? Вот только как?

Kan 02.11.2005 12:35

this.hitTest(_root._xmouse, _root._ymouse, true) - обнаружение конфликта будет происходить только на самом мувике

ZooMer 02.11.2005 13:32

Спасибо, конечно... Но это опять не то... _root._xmouse, _root._ymouse устанавливает все те же квадратные рамки. Только эффект уже другой. Если кликнуть рядом с рабочей областью клипа, на другой такой же - получается, что теряют прозрачность оба.
Все равно спасибо.... Если ничего другого до конца дня не предложат - буду использовать этот метод.

Kan 02.11.2005 14:26

Все работает

на внешнем мувике:
onClipEvent (mouseDown) {
if(this.hitTest(_root._xmouse,_root._ymouse, true)){
startDrag (this);
s=1;
}
}

onClipEvent (mouseUp) {
stopDrag ();
s=2;
}
onClipEvent (enterFrame) {
if (s==1 and (this._alpha <= 100 or this._alpha > 100) and this._alpha > 50) {
this._alpha -= 3;
}
if (s==2 and this._alpha < 100 and this._alpha >= 40) {
this._alpha += 3;
}

}

На внутреннем мувике:
on(rollOver){trace ("onRollOver called");}
on(rollOut){trace ("onRollOut called");}

7thsky™ 02.11.2005 14:29

Вложений: 1
чего то вы такого не понятного тут написали.

ZooMer 02.11.2005 14:49

Блин! Да тупость получается.. Создай 2 круглых объекта и наложи один поверх другого, потом скопируй в каждый из них этот код. Публикуй. попробуй пошевелить один. В том месте, где его перекрывает второй... Шевелится только один, а альфу теряют оба. Вот так.

7thsky™ 02.11.2005 15:19

ты не блинкай, ты лучше нормально объясни что у тебя не получается, потому что по первому посту ты вообще другое хотел

ZooMer 02.11.2005 15:24

В данном случае идет проверка не на сам клип, а на место, где стоит этот клип. Если под ним есть такой же объект, то будет шевелиться именно нижний, поскольку, скорее всего он выполняется позже (очередность команд), а 2 startDrag'а запустить нельзя. Но все остальные параметры работают. Переменная "s" становится равной 1 и цикл с альфой начинается.

ZooMer 02.11.2005 15:34

Цитата:

Сообщение от 7thsky™
ты не блинкай, ты лучше нормально объясни что у тебя не получается, потому что по первому посту ты вообще другое хотел

Вообще-то мне показалось это альтернативой.
Надо сделать 15 шариков с текстом внутри, которые будут передвигаться пользователем по экрану. При наведении на сам текст (на самом деле там просто прозрачная обводка целого текста, чтобы удобнее было нажимать) происходит переход на другой кадр клипа с текстом (с понтом подсветка). При нажатии на текст происходит getURL на страничку....
Нужно что-то что позволит работать не с областью объекта, а самим объектом, не превращая его в батон, поскольку с ним работать вообще невозможно - там выходит кнопка в кнопке - видимо он считает это абсурдом.

ZooMer 02.11.2005 15:44

Да пусть даже в батон, но только, чтобы с ним работать можно было...

7thsky™ 02.11.2005 16:06

Вложений: 1
Код:

onClipEvent (mouseDown) {
this.onPress = function () {
startDrag (this);
s=1;
}

Это шедевр :)

вот лови


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

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