Просмотр полной версии : Функция выполняется хотя не должна :)
Допустим есть такая миниигра,шарики летят вверх,щелкаешь по ним,они исчезают,пропустил пять шариков проиграл. Проблема с пропущенными шариками - функция miss_click все равно иногда выполняется даже когда ни одного шарика не пропустил.
function new_kis_bubble() {
haha=new bubble();
haha.addEventListener(MouseEvent.CLICK,kiss_click);
yTween=new Tween(haha,'y',None.easeIn,kord1y,end_kordy,speed,false);
xTween=new Tween(haha,'x',None.easeIn,kord1x,end_kordx,speed,false);
mymc.addChild(haha);
yTween.addEventListener(TweenEvent.MOTION_FINISH,miss_click);
}
function kiss_click(e:Event) {
// Эта функция срабатывает при клике на шарик
yTween.removeEventListener(TweenEvent.MOTION_FINISH,miss_click);
mymc.removeChild(DisplayObject(e.target));
trace('click');
}
function miss_click(e:Event) {
// Эта должна срабатывать если шарик пропустили
trace('misclick');
}
о_О
1. не делайте вложенных функций
2. у вас странный алгоритм:
upTween один на всех?
upTween'у даете слушать motion_finish на miss_click
а удаляете слушателя motion_finish почему-то уже missed_heart
где вызывается kiss_click?
приберитесь в своем коде, по данным каракулям невозможно понять в чем суть проблемы.
прибрался. да алгоритм странный,может как то по другой схеме это можно реализовать?
Может стандартный твинер глючит? Попробуй альтернативный твинер (http://www.greensock.com/).
Такую простую задачу можно и с enter_frame'ом решить.
Вот здесь что происходит:
upTween.removeEventListener(TweenEvent.MOTION_FINISH,missed_heart);
?
Что такое upTween и missed_heart?
Еще раз поправил вот эта строка должна стоять.
yTween.removeEventListener(TweenEvent.MOTION_FINISH,miss_click);
Я не понимаю,yTween в данном случае получаетяс один для всех? тоесть кликая по обьекту я убераю слушатель для всех обьектов правельно? как убрать для какого то конкретного обьекта?
Нет там получается немного по другому. Как только вы пишете
yTween = new Tween
создается экземпляр класса Tween и ссылка на него присваивается переменной yTween.
В следующий раз когда происходит тоже самое - переменной yTween присваивается ссылка на только что созданный экземпляр Tween, а ссылка на то что лежало в этой переменной уходит в небытиё. Естественно строка
yTween.removeEventListener(TweenEvent.MOTION_FINISH,miss_click);
будет удалять слушатель не оттуда откуда хотелось бы.
понятно,и как мне привязать твин к обьекту?
понятно,и как мне привязать твин к обьекту?
Например сделать твин свойством класса bubble.
что мне указазывать твину в качестве первого аргумента?
public class bubble extends MovieClip{
public function bubble (kord1x,kord1y,end_kordx,end_kordy,speed) {
var upTween=new Tween(haha,'y',None.easeIn,kord1y,end_kordy,speed,false);
}
}
Если вы хотите управлять этим твином извне экземпляра bubble (прикреплять слушатели), то он должен быть полем в классе. А в качестве первого аргумента конструктор твина принимает перемещаемый объект, в данном случае this.
public class bubble extends MovieClip{
public var upTween:Tween;
public function bubble (kord1x,kord1y,end_kordx,end_kordy,speed) {
super();
upTween = new Tween(this, 'y', None.easeIn, kord1y, end_kordy, speed, false);
}
}
а как мне теперь удалить тот обьект чей твин закончился?
haha.upTween.addEventListener(TweenEvent.MOTION_FINISH,miss_click);
function miss_click(e:Event) {
g.removeChild(DisplayObject(e.target)); // таргет получается обьект твин
}
DisplayObject(e.target.obj)
Всем спасибо проблема решена :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.