Форум 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 и цикл с альфой начинается.


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

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