У меня есть мувиклип, который вращается. Я хочу, когда пользователи перетаскивают его, чтобы перестать вращаться и быть в исходном положении. Я написал этот код, но я получаю ошибку 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);
}
}
}
Вы добавляете прослушиватели событий внутри рамки ввода. Это позволит добавлять слушателей событий в каждый кадр! Это не приведет к хорошим результатам :(Переместите ваши прослушиватели событий переполнения вне рамки ввода. На стороне примечания, зачем вам нужно событие Enter Frame, если все, что вы делаете, это добавление событий перетаскивания? –
Спасибо, вы правильно, но в моем коде должно быть больше ошибок, потому что, когда я удаляю прослушиватели событий внутри рамки Enter, мой hitTestObject не работает. – Marianna
Добавить перемещающий перемещение мыши при запуске вашего перетаскивания и проверить свой хит-тест внутри прослушивателя событий перемещения и полностью удалите входной кадр, поскольку он не нужен. Не забудьте удалить слушателя перемещения мыши, когда ваше перетаскивание завершено или когда ваш тест удачи будет успешным. –