2015-08-18 2 views
-1

У меня есть мувиклип, который вращается. Я хочу, когда пользователи перетаскивают его, чтобы перестать вращаться и быть в исходном положении. Я написал этот код, но я получаю ошибку TypeError: Ошибка # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект. at omoixes10_fla :: MainTimeline/EntFrame(), когда я перехожу к следующему кадру. Я не вижу, что я сделал неправильно. Не могли бы вы помочь мне с моим кодом? Нужно ли мне удалять анимацию перед переходом к следующему кадру?Как удалить анимацию перед переходом к следующему кадру в as3

import flash.display.MovieClip; 
import fl.transitions.Tween; 
import fl.transitions.easing.*; 


tick1.parent.removeChild(tick1); 
wrong1.parent.removeChild(wrong1); 

sentences2.buttonMode=true; 
sentences1.buttonMode=true; 
Piece1_mc.buttonMode=true; 

var my_x:int=stage.stageWidth 
var my_y:int=stage.stageHeight 
var myWidth:int=0-my_x; 
var myHeight:int=0-my_y; 
var boundArea:Rectangle=new Rectangle(my_x, my_y, myWidth ,myHeight); 



var spin:Tween=new Tween(Piece1_mc, "rotation",Elastic.easeInOut,0,360,5,true); 
    spin.stop(); 



sentences2.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler); 

function fl_MouseClickHandler(event:MouseEvent):void 
{ 
    snoopy.gotoAndPlay(2); 
    addChild(tick1); 
    addChild(wrong1); 
    sentences2.removeEventListener(MouseEvent.CLICK, fl_MouseClickHandler); 
    sentences1.removeEventListener(MouseEvent.CLICK, fl_MouseClickHandler_2); 
    spin.start(); 
    spin.addEventListener(TweenEvent.MOTION_FINISH, onFinish); 
    function onFinish(e:TweenEvent):void { 
    e.target.yoyo(); 

    { 
    Piece1_mc.addEventListener(MouseEvent.MOUSE_DOWN, DragP1); 
    function DragP1 (event:MouseEvent):void 
    { 
     Piece1_mc.startDrag(); 
     Piece1_mc.startDrag(false,boundArea); 
     spin.stop(); 
    } 

    stage.addEventListener(MouseEvent.MOUSE_UP, DropP1); 
    function DropP1(event:MouseEvent):void 
    { 
     Piece1_mc.stopDrag(); 
    } 
    if(Targ1_mc.hitTestObject(Piece1_mc.Tar1_mc)) { 
     Piece1_mc.x=677; 
     Piece1_mc.y=48,10; 
     myTimer.start(); 
    spin.stop(); 
    } 
    } 
} 


sentences1.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler_2); 

function fl_MouseClickHandler_2(event:MouseEvent):void 
{ 
    snoopy.gotoAndPlay(64); 
} 


var myTimer:Timer = new Timer(2000,1); 
myTimer.addEventListener(TimerEvent.TIMER, timerListener); 
function timerListener (e:TimerEvent):void { 
gotoAndStop(15); 

if (Piece1_mc.parent) 
     { 
     Piece1_mc.parent.removeChild(Piece1_mc); 
     }if (tick1.parent) 
     { 
     tick1.parent.removeChild(tick1); 
     } 
    if (wrong1.parent) 
     { 
     wrong1.parent.removeChild(wrong1); 
     } 
} 
} 
+0

Вы добавляете прослушиватели событий внутри рамки ввода. Это позволит добавлять слушателей событий в каждый кадр! Это не приведет к хорошим результатам :(Переместите ваши прослушиватели событий переполнения вне рамки ввода. На стороне примечания, зачем вам нужно событие Enter Frame, если все, что вы делаете, это добавление событий перетаскивания? –

+0

Спасибо, вы правильно, но в моем коде должно быть больше ошибок, потому что, когда я удаляю прослушиватели событий внутри рамки Enter, мой hitTestObject не работает. – Marianna

+0

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

ответ

1

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

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

В-третий, так как вы повращать MovieClip, и вы хотите, чтобы вернуться в исходном состояние, вы должны сделать:

Piece1_mc.rotation=0; 

Надеется, что это помогает.