Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   motionFinish (http://www.flasher.ru/forum/showthread.php?t=149540)

ЗлОй ПрОграММер 27.01.2011 12:17

motionFinish
 
Как правильно сделать обработчик события motionFinish ???
сделал так:

Код AS3:

private var tween: Tween;
tween.addEventListener(TweenEvent.MOTION_FINISH, TweenFinished);
function TweenFinished(e: TweenEvent):void{
        trace("Ок");
}

вместо того чтобы вывести "Ok" появляется ошибка
Код AS3:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
        at Animation()
        at flash.display::Sprite/constructChildren()
        at flash.display::Sprite()
        at flash.display::MovieClip()

Что я сделал не так ???

Волгоградец 27.01.2011 12:25

tween не создал?

ЗлОй ПрОграММер 27.01.2011 12:32

Создал ! вообщем нашёл пример с motionFinish и переделал свой код, в нём два раза описал событие
Код AS3:

tween.addEventListener(TweenEvent.MOTION_FINISH, TweenFinished);

и всё заработало
Код AS3:

function MouseOver(e: MouseEvent):void{
        MOver = true;
        Mouse.cursor = MouseCursor.BUTTON;
        tween = new Tween(this, "y", Bounce.easeOut, y, stateY+7, 10, false);
        tween.addEventListener(TweenEvent.MOTION_FINISH, TweenFinished);               
        }
 
function MouseOut(e: MouseEvent):void{
                MOver = false;
                Mouse.cursor = MouseCursor.ARROW;       
                tween = new Tween(this, "y", None.easeNone, y, stateY, 5, false);
                tween.addEventListener(TweenEvent.MOTION_FINISH, TweenFinished);
}

ток вот вопрос два раза описать событие это приемлемо ?

ChuwY 27.01.2011 13:08

А ты покажи код, где создаешь.

В этом коде ты подписываешься каждый раз на новый экземпляр твина, потому это единственный выход в общем-то.
Только ты не забывай отписать старый твин перед тем, как старой ссылке назначишь новый экземпляр.

cleptoman 27.01.2011 13:08

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

Волгоградец 27.01.2011 13:11

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

ЗлОй ПрОграММер 27.01.2011 14:41

а я сделал событие когда анимация завершается, и там проверяется если картинка находится не там где положено она возвращается на место. вот весь этот мой безобразный код ))):
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import fl.transitions.Tween;
        import fl.transitions.TweenEvent;
        import fl.transitions.easing.*;
        import flash.events.MouseEvent;
        import flash.events.Event;
        import flash.net.navigateToURL;
        import flash.net.URLRequest;
        import flash.ui.Mouse;
        import flash.ui.MouseCursor;
        fl.transitions.TweenEvent.MOTION_FINISH;
 
 
        public class Animation extends MovieClip{
 
                private var stateY: int = y;
                private var timeY: int;
                private var tween: Tween;
                private var time: int = 10;
                private var MOver: Boolean;
                public var url: String = "http://www.yandex.ru/";
 
                public function Animation() {
                        addEventListener(MouseEvent.MOUSE_OVER, MouseOver);
                        addEventListener(MouseEvent.MOUSE_OUT, MouseOut);
                        addEventListener(MouseEvent.CLICK, MouseClick);
                }
 
                function MouseOver(e: MouseEvent):void{
                        MOver = true;
                        Mouse.cursor = MouseCursor.BUTTON;
                        tween = new Tween(this, "y", Regular.easeOut, y, stateY+10, time, false);
                        tween.addEventListener(TweenEvent.MOTION_FINISH, TweenFinished);
 
                }
 
                function MouseOut(e: MouseEvent):void{
                        MOver = false;
                        Mouse.cursor = MouseCursor.ARROW;       
                        tween = new Tween(this, "y", None.easeNone, y, stateY, time, false);
                        //tween.addEventListener(TweenEvent.MOTION_FINISH, TweenFinished);
                }
 
                function MouseClick(e: MouseEvent):void{
                        navigateToURL(new URLRequest(url), "_self");
                }
 
                function TweenFinished(e: TweenEvent):void{
                        if ((!MOver)&&(y != stateY))
                                tween = new Tween(this, "y", None.easeNone, y, stateY, time, false);
                }
 
        }
 
}

вот сайт http://bfabyss-ussr.ucoz.ru/ на котором я выложил это меню, ошибок никаких вроде нет

nOobCrafter 27.01.2011 16:16

Проще воспользоваться сторонними либами, например Tweener \ TweenLite


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

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