Форум 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)
-   -   Как правильно ограничить область MovieClip-а? (http://www.flasher.ru/forum/showthread.php?t=85573)

Fbor 26.09.2006 00:46

Как правильно ограничить область MovieClip-а?
 
Суть в том, что мне необходимо два разных клипа с разными обработчиками кликов мыши по соседству.
По умолчанию, если я создаю клип без указания всяких _height или hitArea, его обработчик onRelease (к примеру) срабатывает где-бы я не нажал кнопку. Причем заодно срабатывает и onrelease другого клипа.

Если я создаю новый клип внутри текущего, рисую на нем прямоугольник и назначаю этот клип в качестве hitArea родительскому, то что-то мне это не помогает. Обработчики по старому срабатывают везде и все сразу.

Примерный код
Код:

this.createEmptyMovieClip("image_mc", 1);
this.image_mc.createEmptyMovieClip("image_hit_mc", 0);

this.image_mc.image_hit_mc.moveTo(0, 0);
this.image_mc.image_hit_mc.beginFill(0x555500);
this.image_mc.image_hit_mc.lineTo(40, 0);
this.image_mc.image_hit_mc.lineTo(40,  40);
this.image_mc.image_hit_mc.lineTo(0, 40);
this.image_mc.image_hit_mc.lineTo(0, 0);
this.image_mc.image_hit_mc.endFill();
this.image_mc.image_hit_mc._visible = false;
this.image_mc.hitArea = this.image_mc.image_hit_mc;


this.image_mc.onMouseDown = function () {
...bla-bla-bla...
};

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

Хемуль 26.09.2006 01:35

Может надо использовать событие onPress?
onMouseDown - Обработчик события; вызывается, когда нажимается левая кнопка мыши.
onPress - Обработчик события; вызывается, когда пользователь прижимает левую кнопку мыши, в то время как курсор находится над мувиклипом.

Fbor 26.09.2006 13:57

с onPress-ом та же история :(

Хемуль 26.09.2006 15:57

Код:

this.createEmptyMovieClip("image_mc", 1);
this.image_mc.createEmptyMovieClip("image_hit_mc", 0);

// Рисуем в мувиклипе красный квадрат
this.image_mc.moveTo(0, 0);
this.image_mc.beginFill(0xff0000);
this.image_mc.lineTo(100, 0);
this.image_mc.lineTo(100,  100);
this.image_mc.lineTo(0, 100);
this.image_mc.lineTo(0, 0);

// Рисуем в мувиклипе зелёный квадрат с размерами маски
this.image_mc.beginFill(0x00cc00);
this.image_mc.lineTo(40, 0);
this.image_mc.lineTo(40,  40);
this.image_mc.lineTo(0, 40);
this.image_mc.lineTo(0, 0);

this.image_mc.image_hit_mc.moveTo(0, 0);
this.image_mc.image_hit_mc.beginFill(0x555500);
this.image_mc.image_hit_mc.lineTo(40, 0);
this.image_mc.image_hit_mc.lineTo(40,  40);
this.image_mc.image_hit_mc.lineTo(0, 40);
this.image_mc.image_hit_mc.lineTo(0, 0);
this.image_mc.image_hit_mc.endFill();
this.image_mc.image_hit_mc._visible = false;
this.image_mc.hitArea = this.image_mc.image_hit_mc;

this.image_mc.onPress = function () {
        trace("...bla-bla-bla...");
};

Так всё должно правильно работать. При таком коде, который я представил выше, курсор изменяется только в пределах зелёного квадрата... Ну и событие onPress вызывается при щелчке в пределах зелёной области.

Fbor 26.09.2006 22:29

Круто.. а с onMouseDown не работает :(
onPress реально работает (до этого у меня не работал из-за ошибки в коде), а onMouseDown - нет.
и как можно такое обойти?

Fbor 26.09.2006 22:31

Т.е. если в Вашем коде заменить onPress на onMuseDown, то он срабатывает далеко за пределами мувиклипа :(

Хемуль 27.09.2006 15:39

2 Fbor:
Я знаю. Поэтому я уже давно в этой теме обьяснил, за что отвечает каждое из этих событий. А чем вас onPress не устраивает?

Fbor 27.09.2006 22:41

Хм.. ок, onPress - аналог onMouseDown, только привязанный к мувиклипу (прогнал я.. не совсем понял тот Ваш пост, где вы это разъяснили).
А есть аналог onMouseUp?
Можно-ли так, что onPress - ловлю прижимание кнопки, а onRelease последующее отпускание? Косяков не будет? :)


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

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