Форум 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=136475)

Tranki 18.02.2010 01:21

Функция выполняется хотя не должна :)
 
Допустим есть такая миниигра,шарики летят вверх,щелкаешь по ним,они исчезают,пропустил пять шариков проиграл. Проблема с пропущенными шариками - функция miss_click все равно иногда выполняется даже когда ни одного шарика не пропустил.
Код AS3:

   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');
}


mayakwd 18.02.2010 02:53

о_О
1. не делайте вложенных функций
2. у вас странный алгоритм:
upTween один на всех?
upTween'у даете слушать motion_finish на miss_click
а удаляете слушателя motion_finish почему-то уже missed_heart
где вызывается kiss_click?

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

Tranki 18.02.2010 03:22

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

Bgg 18.02.2010 14:21

Может стандартный твинер глючит? Попробуй альтернативный твинер.
Такую простую задачу можно и с enter_frame'ом решить.

Diestro 18.02.2010 15:56

Вот здесь что происходит:
Код AS3:

upTween.removeEventListener(TweenEvent.MOTION_FINISH,missed_heart);

?
Что такое upTween и missed_heart?

Tranki 18.02.2010 17:10

Еще раз поправил вот эта строка должна стоять.
Код AS3:

yTween.removeEventListener(TweenEvent.MOTION_FINISH,miss_click);

Я не понимаю,yTween в данном случае получаетяс один для всех? тоесть кликая по обьекту я убераю слушатель для всех обьектов правельно? как убрать для какого то конкретного обьекта?

Diestro 18.02.2010 17:55

Нет там получается немного по другому. Как только вы пишете
Код AS3:

yTween = new Tween

создается экземпляр класса Tween и ссылка на него присваивается переменной yTween.
В следующий раз когда происходит тоже самое - переменной yTween присваивается ссылка на только что созданный экземпляр Tween, а ссылка на то что лежало в этой переменной уходит в небытиё. Естественно строка
Код AS3:

yTween.removeEventListener(TweenEvent.MOTION_FINISH,miss_click);

будет удалять слушатель не оттуда откуда хотелось бы.

Tranki 18.02.2010 18:45

понятно,и как мне привязать твин к обьекту?

dixus 18.02.2010 18:58

Цитата:

Сообщение от Tranki (Сообщение 887665)
понятно,и как мне привязать твин к обьекту?

Например сделать твин свойством класса bubble.

Tranki 19.02.2010 17:24

что мне указазывать твину в качестве первого аргумента?
Код AS3:

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);
 
}
}



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

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