Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Функция на 1 действие (http://www.flasher.ru/forum/showthread.php?t=179772)

Tetraeon 21.05.2012 15:01

Функция на 1 действие
 
Приветствую, можно ли объявить слушатель события как ENTER_FRAME только не по кадрово а ровно на 1 действие, например произошел hitTestObject и функция выведет trace('1');
1
А не:
1
1
1
1
и т.д.

FlashRus 21.05.2012 15:05

Можно проверять не в ENTER_FRAME или флаг какой нить предусмотреть....

kukareku 21.05.2012 15:06

Код AS3:

function enterFrameHandler(e:Event):void {
 
if (hitTestObject(...)){
trace("1");
removeEventListener(Event.EMTER_FRAME, enterFramHandler);
}
}


Tetraeon 21.05.2012 17:28

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

TanaTiX 21.05.2012 18:07

Tetraeon, а зачем оставлять слушатель, если от обработчика требуется только однократное исполнение?

Партизан 21.05.2012 18:16

Нда... :)

Код AS3:

private var oneCall:Boolean
 
function enterFrameHandler(e:Event):void {
 
if (hitTestObject(...)&& !oneCall){
trace("1");
oneCall = true;
}
}


Tetraeon 21.05.2012 18:16

это действие будит повторятся не однократно, а выполнятся должно 1 раз за раз

Партизан 21.05.2012 18:19

Tetraeon, а может вы чуть подробнее расскажете задачу, может вы не теми методами стараетесь ее решить?

Tetraeon 21.05.2012 18:24

Скорее всего) Задача при соприкосновении объекта А с объектом В внести изменение значения переменной
объекта В
Код AS3:

public function cleaveRad (Event):void 
{
        if (this.hitTestObject(Hero.hero.cleaveR)&&!oneCall)
        {
                if (hP>0)
                {
                        hP-=Hero.hero.damage*2;       
                        oneCall = true;       
                }
        }
 
}

Работает хорошо, но значению oneCall опять же нужно присвоить true спустя промежуток времени, когда объект А покинет объект В
Пробовал:
Код AS3:

public function cleaveRad (Event):void 
{
        if (this.hitTestObject(Hero.hero.cleaveR)&&!oneCall)
        {
                if (hP>0)
                {
                        hP-=Hero.hero.damage*2;
                        oneCall = true;
                }
 
        }
                oneCall = false;
}

Но все равно не то...

Партизан 21.05.2012 18:51

А когда он его покинет, я так понимаю вы не знаете... Тогда, как-то так наверное:

Код AS3:

public function cleaveRad (e:Event):void 
{
        if (this.hitTestObject(Hero.hero.cleaveR))
        {
              if(!oneCall) {
                if (hP>0)
                  {
                        hP-=Hero.hero.damage*2;
                        oneCall = true;
                    }
                }
 
        }else{
                oneCall = false;
        }
}



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

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