|
|
|||||
Регистрация: May 2009
Сообщений: 30
|
синхронное перемещение
Добрый день!
хотел узнать,как правильнее сделать синхронное перемещение одного объекта,находящегося в зависимости от перемещения второго объекта "зажатого мышкой" в области третьего объекта? =) конкретнее.я хватаю спрайт A и тащу его в область спрайта B. Как только спрайт A оказывается в области спрайта B, спрайт C через начинает двигаться за спрайтом A вдоль оси X, а по оси Y я его стопорю константой. Двигаться то он двигается, но криво. Движения неплавные, и что самое интересное, то что при движение мышки влево он вообще тупит, как только я чуть двину мышь вправо опять работает. |
|
|||||
можно так
|
|
|||||
Регистрация: May 2009
Сообщений: 30
|
спасибо! класс!
движение теперь плавное, но осталась проблема с пропаданием объекта.т.е. если я оставляю эту функцию B.addEventListener(MouseEvent.MOUSE_OUT, pryachem_C); function pryachem_C(event:MouseEvent):void { C.alpha=0; } Если эту функцию я убираю, то всё ок! в чём может быть дело? p.s. потрейсил MOUSE_OUT, оказывается при движение мыши влево все работает идеально, но при движении мыши вправо флэш думает, что я вывожу объект С за пределы B, и обратно... Добавлено через 3 часа 11 минут блин, понял в чем дело, но проблема не решилась =( курсор при движении вправо заезжает на объект А, из-за этого он выпадает из области объекта B и срабатывает функция MOUSE_OUT. Если двигать мышрой быстро, то он перескакивает через объект и всё ок, а при медленном движении каждый раз заезжает. Отсюда и мерцание. А при движении влево "задевание" за объект А не происходит. Я пробовал изменять с помощью adChildAt приоритеты, но толку нет. Может кто знает, как выйти из ситуации?? Последний раз редактировалось a7z; 26.07.2010 в 17:04. Причина: после трейса |
|
|||||
Возможно, мышка попадает на С, или на А, тем самым теряется фокус с B и срабатывает событие MOUSE_OUT
вообще чтобы что-то сказать точно, лучше видеть весь код. А так есть пара вариантов обойти проблему: 1) поиграть с расположением А и С. То есть, чтобы их координаты были не строго равны координатам мышки, а, к примеру, 2) либо создать функцию, которая будет проверять через определенные промежутки времени положение мышки и задать область, в которой будет видна С. Примерно так: var eventTimer:Timer = new Timer(200); //задаем таймер в миллисекундах (1000мл = 1 сек.) var mx:Number; var my:Number; eventTimer.addEventListener(TimerEvent.TIMER, Cvisible); eventTimer.start(); private function Cvisible(e:TimerEvent):void { mx = stage.mouseX; my = stage.mouseY; //задаем область, а которой будет видно С. Так как эта облать напрямую зависит от В, //то ориентируемся на него. Будет работать правильно, только если то, что находится //внутри символа В имеет координаты х=0, у=0; if((mx>B.x)&&(mx<(B.x+B.width))&&(my>B.y)&&(my<(B.y+B.height))) { C.visible = true; //тут адекватнее использовать свойство visible, а не alpha } else { C.visible = false; } e.updateAfterEvent(); //Эту строчку не забыть, без неё таймер не будет обновляться. } Последний раз редактировалось ZergMaster; 26.07.2010 в 18:46. |
|
|||||
Регистрация: May 2009
Сообщений: 30
|
угу, попадает на A или C
я тоже мучал первый вариант,но там все зависит от скорости мыши и это не крута а второй, мне кажется очень, жесткий... я вот думаю, может пойти от обратного и вообще убрать out для B... Поставить 4 спрайта (B1,B2,B3,B4) по краям спрайта B и прописать, что при попадании на них хайдить спрайт C? p.s. решил проблему =) надо было ПРАВИЛЬНО расставить позиции addChildAt(); A и C надо сунуть под B, B сделать невидимым, а для фона добавить спрайт D с координатами, как у B и сделать его самым нижним Последний раз редактировалось a7z; 26.07.2010 в 21:56. Причина: решено |
Часовой пояс GMT +4, время: 01:35. |
|
« Предыдущая тема | Следующая тема » |
|
|