Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как поставить функцию на тот момент, когда мышь только заходит на объект? (http://www.flasher.ru/forum/showthread.php?t=190311)

SEMA_KMS 23.12.2012 14:36

как поставить функцию на тот момент, когда мышь только заходит на объект?
 
Не посчитайте дураком, AS 3.0 изучаю недавно)))
Не могу вспомнить и найти в нете как поставить функцию на тот момент, когда мышь только заходит на объект((
Обработчик события, какое событие(я сформулировать не могу).
Нужно что бы объект убегал от мыши , когда мышь только заходит на обьект((
В справке найти не могу, так как к лексикону не привык...
Скидывать нечего, так как мне только этот код и нужен.

elder_Nosferatu 23.12.2012 14:41

Подпишитесь на событие MouseEvent.MOUSE_OVER и будет вам щастье

Инсайт 23.12.2012 16:02

Код AS3:

вашОбъект.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
 
private function onMouseOver(e:MouseEvent):void
{
//тут вставляйте нужный код
}


caseyryan 23.12.2012 16:22

Надо не на MOUSE_OVER подписываться в этом случае, а на MouseEvent.ROLL_OVER. При MOUSE_OVER событие будет слаться все время, пока мышь перемещается над объектом
если внутри вложены другие объекты реагирующие на мышь, событие будет и на них всплывать

udaaff 23.12.2012 17:42

Цитата:

Сообщение от caseyryan (Сообщение 1111354)
Надо не на MOUSE_OVER подписываться в этом случае, а на MouseEvent.ROLL_OVER. При MOUSE_OVER событие будет слаться все время, пока мышь перемещается над объектом.

Разница между этими событиями в том, что ROLL_OVER не всплывающее.

Котяра 23.12.2012 17:52

Цитата:

При MOUSE_OVER событие будет слаться все время, пока мышь перемещается над объектом.
Нет. Это не так.

SEMA_KMS 24.12.2012 01:26

С private я еще не знаком, и решил вопрос иначе(корявенько наверно и слишком длинно)
Код AS1/AS2:

import com.greensock.*;
import com.greensock.easing.*;
 
mc1.mc.addEventListener(MouseEvent.MOUSE_OVER, mouseOVER);
function mouseOVER(event:MouseEvent):void
{
        TweenLite.to(mc1, 1, {x:Math.random()*800, y:Math.random()*650, ease:Cubic.easeOut});
}
mc1.addEventListener(MouseEvent.MOUSE_DOWN, mouseDOWN);
function mouseDOWN(event:MouseEvent):void
{
        mc1.startDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUP);
function mouseUP(event:MouseEvent):void
{
        mc1.stopDrag();
}
var mcc:Mcc = new Mcc  ;
mcc.x = 400;
mcc.y = 324;
mc1.ok_mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDOWN_2);
function mouseDOWN_2(event:MouseEvent):void
{
        mcc.visible = true;
        mc1.visible = false;
        addChild(mcc);
}
mcc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDOWN_3);
function mouseDOWN_3(event:MouseEvent):void
{
        mcc.startDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUP_2);
function mouseUP_2(event:MouseEvent):void
{
        mcc.stopDrag();
}
mcc.mcc1.addEventListener(MouseEvent.MOUSE_DOWN, mouseDOWN_4);
function mouseDOWN_4(event:MouseEvent):void
{
        mcc.visible = false;
        mc1.visible = true;
        addChild(mc1);
}

Коментарии по коду (кроме тех, типа "че эт за фигня") выслушать рад. Мне очень интересно как это написать короче, правильнее и читабельнее, все таки я только начал изучать AS 3.0)))

caseyryan 24.12.2012 07:21

Цитата:

С private я еще не знаком, и решил вопрос иначе(корявенько наверно и слишком длинно)
Это свойство для классов. В кадрах оно не используется
Цитата:

Коментарии по коду (кроме тех, типа "че эт за фигня") выслушать рад. Мне очень интересно как это написать короче, правильнее и читабельнее, все таки я только начал изучать AS 3.0)))
А замечания такие:
Ну нужно создавать кучу обработчиков на каждый объект, достаточно одного в каждом случае:
Код AS3:

import com.greensock.*;
import com.greensock.easing.*;
 
var mcc:Mcc = new Mcc() ; // правильнее всегда добавлять скобки, хоть и не всегда это имеет значение
mcc.x = 400;
mcc.y = 324;
 
mc1.mc.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
mc1.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
mc1.ok_mc.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
 
function onRollOver(e:MouseEvent):void {
  TweenLite.to(mc1, 1, {x:Math.random()*800, y:Math.random()*650, ease:Cubic.easeOut});
}
function onMouseUp(e:MouseEvent):void {
      var target:MovieClip = e.target as MovieClip;
      if (target == mc1.mc) {
 
      }
}
function onMouseDown(e:MouseEvent):void {
      var target:MovieClip = e.target as MovieClip;
      if (target == mc1.mc) {
            // тут обрабатываем то, что связано с этим мувиклипом
      } else if (target == mc1.ok_mc) {
 
      } else if (target == mcc) {
 
      } else if (target == mcc.mcc1) {
 
      }
}

Хотя лучше вообще на родительские контейнеры со всплытием подписываться.

SEMA_KMS 25.12.2012 08:12

Вложений: 1
Ну вот повозился и вопросы таковы...
Код который я скинул работает, попробовав использовать предложенный не понял и заметил несколько вещей:

Код AS3:

mc1.mc.addEventListener(MouseEvent.MOUSE_OVER, mouseOVER);
mc1.addEventListener(MouseEvent.MOUSE_DOWN, mouseDOWN_1);
mc1.ok_mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDOWN_2);
 
mcc.mcc1.addEventListener(MouseEvent.MOUSE_DOWN, mouseDOWN_3);
mcc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDOWN_4);
 
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUP_1);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUP_2);

Первые три обработчика на разные объекты, к тому же первый на наведении курсора.
Далее еще два то же на разные объекты.
По нижнем двум действительно думал как бы сократить код, но не пойму как проверить в условии какой из Drag"ов работает (stopDrag или startDrag)

По предложенному коду вопрос по поводу имен функции таких к примеру как:
Код:

mc1.ok_mc.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
Выдает ошибку:

Код AS3:

Монтажный кадр 1, слой "Слой 1", кадр 1, строка 59
Warning: 1090: Ошибка миграции:
Flash Player не запускает обработчик событий onMouseDown автоматически во время выполнения в ActionScript 3.0.
Сначала нужно зарегистрировать этот обработчик для события, используя addEventListener ("mouseDown", callback_handler).

Или это к AS 2.0?
За предложенный способ все равно спасибо)))

Вообще задумка было такая как во в вложении к посту, хотел пошутить над другом))) Но фишка в том что у меня в компилированном виде все без багов, но у него когда проигрывает, курсор при нажатии на "да" во втором окошке липнет и не отпускается (прикол не удался)

iNils 25.12.2012 09:32

SEMA_KMS, теги цитирования предназначены для цитирования, а не для оформления кода.


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

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