Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.07.2010, 14:51
a7z вне форума Посмотреть профиль Отправить личное сообщение для a7z Найти все сообщения от a7z
  № 1  
Ответить с цитированием
a7z

Регистрация: May 2009
Сообщений: 30
По умолчанию синхронное перемещение

Добрый день!
хотел узнать,как правильнее сделать синхронное перемещение одного объекта,находящегося в зависимости от перемещения второго объекта "зажатого мышкой" в области третьего объекта? =)
конкретнее.я хватаю спрайт A и тащу его
Код AS3:
A.startDrag();
в область спрайта B. Как только спрайт A оказывается в области спрайта B, спрайт C через
Код AS3:
C.x=stage.mouseX;
начинает двигаться за спрайтом A вдоль оси X, а по оси Y я его стопорю константой. Двигаться то он двигается, но криво. Движения неплавные, и что самое интересное, то что при движение мышки влево он вообще тупит, как только я чуть двину мышь вправо опять работает.

Старый 26.07.2010, 15:08
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 2  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
можно так
Код AS3:
B.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveOverB);
private function onMouseMoveOverB(e:MouseEvent):void 
{
C.x = A.x;
}

Старый 26.07.2010, 15:30
a7z вне форума Посмотреть профиль Отправить личное сообщение для a7z Найти все сообщения от a7z
  № 3  
Ответить с цитированием
a7z

Регистрация: May 2009
Сообщений: 30
спасибо! класс!
движение теперь плавное, но осталась проблема с пропаданием объекта.т.е. если я оставляю эту функцию
Код AS3:
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. Причина: после трейса
Старый 26.07.2010, 18:43
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 4  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Возможно, мышка попадает на С, или на А, тем самым теряется фокус с B и срабатывает событие MOUSE_OUT
вообще чтобы что-то сказать точно, лучше видеть весь код.
А так есть пара вариантов обойти проблему:
1) поиграть с расположением А и С. То есть, чтобы их координаты были не строго равны координатам мышки, а, к примеру,
Код AS3:
C.x=stage.mouseX-5;
2) либо создать функцию, которая будет проверять через определенные промежутки времени положение мышки и задать область, в которой будет видна С. Примерно так:

Код AS3:
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.
Старый 26.07.2010, 19:41
a7z вне форума Посмотреть профиль Отправить личное сообщение для a7z Найти все сообщения от a7z
  № 5  
Ответить с цитированием
a7z

Регистрация: 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, время: 09:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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