С Новым годом! Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/30: Рейтинг темы: голосов - 30, средняя оценка - 4.70
2 / 2 / 0
Регистрация: 30.12.2009
Сообщений: 8

Передвижение объекта при событии мыши

25.02.2011, 15:12. Показов 5877. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я хочу, чтобы объект двигался в одном направлении при наведении на него мышью и в обратном направлении при отведении мыши от него. Это реализовать не сложно, однако проблема в том, что когда объект проходит часть пути и я отвожу от него мышь, то он вместо того, чтоб начать движение в обратном направлении, никак не реагирует, снова навожу на него мышью и он начинает своё движение с самого начала. То есть мне надо, чтоб объект двигался в одном направлении и когда происходило событие мыши (наведениее, отведение), он начинал двигаться в обратном направлении с того места, где произошло событие. В случае, если я мышь наведу и не буду отводить, то чтобы объект дошёл до конца и остановился в ожидании, что я отведу мышь от него.
Можно объяснить словами в каких кадрах что прописать и т.д. СПАСИБО!
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2011, 15:12
Ответы с готовыми решениями:

Передвижение объекта к курсору мыши
В 2D по платформе прыгает мяч. Нужно, чтобы мяч двигался в сторону курсора по X. Пробую реализовать через addforce, мяч просто скачет в...

Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши выключить индикатор NumLock(+Звук),при нажатие право
Не могу решить подскожите кто знает.(Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши...

Unity3D Не могу найти пример как сделать передвижение по щелчку мыши передвижение персона
Пытаюсь понять как сделать передвижение по щелчку, примерно как в игре "mekorama" правда там сенсор, но это суть не меняет ...

8
Модератор
 Аватар для TanaTiX
2935 / 1794 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
25.02.2011, 21:28
В кадрах лучше не писать, писать лучше в классах.
При наведении используйте конструкцию типа mc.x+=5;
А при отведении - mc.x-=5;
Вообще из такого описания не совсем понятно что и как вы там реализовали. Лучше показывать участки кода, в которых есть проблема.
1
2 / 2 / 0
Регистрация: 30.12.2009
Сообщений: 8
26.02.2011, 02:42  [ТС]
Я короче понял
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if(currentFrame==1) stop();
var a:int=0;
var b:int=0;
btn.addEventListener(MouseEvent.MOUSE_OVER, fun);
btn.addEventListener(MouseEvent.MOUSE_OUT, fun1);
function fun(e:MouseEvent):void {
    if(currentFrame==1)
        play();
        else if(currentFrame>20) {
        a=currentFrame;
        gotoAndPlay(40-a);
        }
}
function fun1(f:MouseEvent):void {
    if(currentFrame==20)
       play();
       else if(currentFrame<20&&currentFrame>1) {
       b=currentFrame;
       gotoAndPlay(40-b);
       }
}
И еще stop(); в 20-ом кадре.
А как теперь сделать так, если у меня есть несколько кнопок, чтоб двигалась только та, на которую я навожу мышью?

Добавлено через 2 минуты
Цитата Сообщение от TanaTiX Посмотреть сообщение
В кадрах лучше не писать, писать лучше в классах.
При наведении используйте конструкцию типа mc.x+=5;
А при отведении - mc.x-=5;
Вообще из такого описания не совсем понятно что и как вы там реализовали. Лучше показывать участки кода, в которых есть проблема.
Ну я написал вот в кадрах, а что ты имел ввиду, когда говорил, что лучше в классах?
1
Модератор
 Аватар для TanaTiX
2935 / 1794 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
26.02.2011, 16:00
1) Создаем булевую переменную с исходным значением false
2) По событию наведения переводим ее значение в true, если ее значение было false, и запускаем, к примеру, событие Event.ENTER_FRAME - т.е. событие будет срабатывать при каждом входе в кадр.
3) В обработчике пишем конструкцию типа
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
if(bool){
   if(currentFrame<totalFrames){
      gotoAndStop(currentFrame+1);
   }
}else{
   if(currentFrame>1){
      gotoAndStop(currentFrame-1);
   }else{
       //тут отписываемся от слушателя
   }
}
Писал на коленке - могут быть неточности.
4) По отведению мыши переводим в значение булевой переменной в false.
Ну я написал вот в кадрах, а что ты имел ввиду, когда говорил, что лучше в классах?
Проектом, код которого написан в кадрах или, тем более, не дай бог, на объектах, очень тяжело управлять. В одних кадрах переменные есть, в других - нет, в третьих - уже нет объектов, а код к ним обращается. Высокий риск создания одинх и тех же слушателей, т.е. генерирование большого числа объектов, которые уже существуют, что засоряет память, затрудняет отладку и пр.
+ код, написанный в кадрах не удобно отслеживать - бегай себе по кадрам, по объектам, пока найдешь. Писать в кадрах - значит писать во Flash IDE, а тот редактор кода... Убогий он. Попробуйте FlashDevelop например.
Научиться писать в классах тоже не просто, но зато с пониманием сути происходящего придет и истинное просветление.
2
2 / 2 / 0
Регистрация: 30.12.2009
Сообщений: 8
26.02.2011, 23:02  [ТС]
Спасибо большое, TanaTIX. Я начал учить флеш и ActionScript совсем недавно. Я знаю, что адоб флеш как ИДЕ некудышний. Стоит на закачке Адоб флекс. Это как раз меня и раздражает в программировании в кадрах, что код пишеться в разном месте и тяжело отслеживать. Но я написал вот это в первом кадре (за исключением команды stop(); в 20ом кадре из 40ка, чтоб объект остановился), тем не менее прослушивание мыши и функции работают напротяжении всего мувика. Я подумал, можно ли писать весь код только в одном кадре? И как мне впихнуть этот stop(); в основную программу в первом кадре?
0
 Аватар для lolopolosko
1354 / 315 / 6
Регистрация: 21.11.2009
Сообщений: 992
26.02.2011, 23:08
Создайте слой с одним ключевым кадром и в нем пишите весь код... или просто научитесь писать классы в Флеше
0
Модератор
 Аватар для TanaTiX
2935 / 1794 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
26.02.2011, 23:17
Цитата Сообщение от lolopolosko Посмотреть сообщение
Создайте слой с одним ключевым кадром и в нем пишите весь код... или просто научитесь писать классы в Флеше
Зачем давать изначально идеологически неверную альтернативу написания кода в кадрах? Это было в моде во время ас1.
Gasheck, есть один очень интересный метода addFrameScript. Интересен он тем, что добавляет в кадр нужную там функцию (например, stop()), и тем, что является недокументированным. Т.е. в официальной документации о нем ни слова, но используют его довольно часто. Он поможет избавиться от стопов в кадрах, да и мало ли еще где.
1
 Аватар для lolopolosko
1354 / 315 / 6
Регистрация: 21.11.2009
Сообщений: 992
26.02.2011, 23:39
об этом методе я написал месяц назад https://www.cyberforum.ru/acti... ost1329080
А вот вы как раз даете неверное альтернативу написания кода...
За этим методом проследить довольно трудно + он не просто так не добавлен в документацию...
Цитата Сообщение от TanaTiX Посмотреть сообщение
но используют его довольно часто
Хотелось бы посмотреть кто его использует так часто ... Причина не использования его, это та что этот метод могут попросту выключить в следующих версиях плеера
0
Модератор
 Аватар для TanaTiX
2935 / 1794 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
26.02.2011, 23:50
Выключить могут газ, свет и пр.
А производители программного обеспечения как правило следят за совместимостью с предыдущими версиями. Пример - это весь as1: на нем писать можно, но ни один уважающий себя кодер на нем писать не будет (создание баннеров не в счет - это другое направление). Так что скорее включат, чем выключат.

ЗЫ. надеюсь обойдется без холивара
ЗЗЫ. а вообще это просто удобно. Но если даже вы окажитесь правы, то не тяжело написать альтернативу с абсолютно идентичным функционалом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2011, 23:50
Помогаю со студенческими работами здесь

Как остановить передвижение объекта при столкновении с другим объектом
Как остановить передвижение объекта при столкновении с другим объектом при движении вправо, влево Код передвижения вправо (первый...

Передвижение объекта по шахматке, как останавливать при достижении края поля?
Добрый день, есть грубо говоря шахматная доска, нужно передвигать объект с одного края до другого (если по пути встречается препятствие -...

Перемещение объекта при помощи мыши
Доброго времени суток. Как можно реализовать перемещение какого либо объекта (label, button и т.д) с помощью мыши, нажал на него и таскаешь...

Системное передвижение мыши
Всем привет. Как возможно сделать передвижение курсора с полной эмуляцией настоящей мыши? Как я понимаю, драйвер ввода посылает куда-то...

SendInput передвижение мыши
Всем привет. Никак не могу разобраться с SendInput. Засунул на таймер такой код: TPoint pt; GetCursorPos(&amp;pt); int rX, rY; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru