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

Capnmeth 16.06.2015 20:20

Как вызывать некую функцию один раз
 
Например hitTestObject ом проверяешь есть столкновение или нет конечно же hitTestObject вызываеться в ENTER_FRAME _е если столкновение есть то проигривай но в переменной hit запысиваеться TRUE TRUE TRUE ну и логично анимация начинает проигриваться много раз как сделать так что бы при столкновении в переменной один раз записывался true но а когда не будет столкновении то false.. потом опять один раз true и так далее...

caseyryan 16.06.2015 20:34

Ну сделать флаг, типа isHitting и проверять его
Код AS3:

if (!isHitting) {
  isHitting = true;
  // столкновение
}


Capnmeth 16.06.2015 20:40

таким образом анимация работает только один раз а потом перестает работать.. Не вариант

Добавлено через 47 секунд
Цитата:

Сообщение от caseyryan (Сообщение 1183731)
Ну сделать флаг, типа isHitting и проверять его
Код AS3:

if (!isHitting) {
  isHitting = true;
  // столкновение
}


таким образом анимация работает только один раз а потом перестает работать.. Не вариант
__________________

caseyryan 16.06.2015 20:45

Ну а потом проверять если hitTest == false, то и флаг менять на false.
Тут, как бы, других вариантов то и нет) Только если вообще не использовать никакие хиттесты, а перевести все на SAT, или просто прикрутить физический движок, в котором эта SAT уже реализована

gloomyBrain 16.06.2015 20:48

Код AS3:

private var _isHitting:Boolean = false;
 
public function get isHitting():Boolean
{
    return _isHitting;
}
 
public function set isHitting(value:Boolean):void
{
    // ничего не изменилось, просто выходим из функции-сеттера
    if (value == _isHitting) return;
 
    // получено значение, отличное от того что было ранее
    // сохраняем это значение для следующих вызовов сеттера
    _isHitting = value;
 
    // если получено новое значение и оно таки true
    // то проигрываем анимацию
    if (_isHitting)
    {
        playAnimation();
    }
}
 
...
 
myObject.isHitting = true; // анимация начинает проигрываться
myObject.isHitting = true; // а второй раз не начинает, потому что мы сохранили старое значение
myObject.isHitting = false; // в нашем примере мы ничего не делаем, но вообще тут бы надо останавливат анимацию
myObject.isHitting = true; // анимация снова начинает проигрываться, потому как предыдущее значение isHitting было false


Capnmeth 16.06.2015 20:53

Цитата:

Сообщение от caseyryan (Сообщение 1183734)
Ну а потом проверять если hitTest == false, то и флаг менять на false.
Тут, как бы, других вариантов то и нет) Только если вообще не использовать никакие хиттесты, а перевести все на SAT, или просто прикрутить физический движок, в котором эта SAT уже реализована

Код AS3:

if (kubik_mc.hitTestObject(kubik2)){
                if (!isHitting) {
        isHitting = true;
        playAnimation();
      }
                }

вот например и что дальше?

Добавлено через 3 минуты
Цитата:

Сообщение от gloomyBrain (Сообщение 1183735)
Код AS3:

private var _isHitting:Boolean = false;
 
public function get isHitting():Boolean
{
    return _isHitting;
}
 
public function set isHitting(value:Boolean):void
{
    // ничего не изменилось, просто выходим из функции-сеттера
    if (value == _isHitting) return;
 
    // получено значение, отличное от того что было ранее
    // сохраняем это значение для следующих вызовов сеттера
    _isHitting = value;
 
    // если получено новое значение и оно таки true
    // то проигрываем анимацию
    if (_isHitting)
    {
        playAnimation();
    }
}
 
...
 
myObject.isHitting = true; // анимация начинает проигрываться
myObject.isHitting = true; // а второй раз не начинает, потому что мы сохранили старое значение
myObject.isHitting = false; // в нашем примере мы ничего не делаем, но вообще тут бы надо останавливат анимацию
myObject.isHitting = true; // анимация снова начинает проигрываться, потому как предыдущее значение isHitting было false


Я сетерами и гетерами не пишу можешь простую версию что бы по понятнее было..

Добавлено через 11 минут
все работает спасибо всем!


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

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