Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как проиграть звук один раз в enterframe (http://www.flasher.ru/forum/showthread.php?t=207355)

Godwarlock 11.04.2014 23:16

Как проиграть звук один раз в enterframe
 
Есть звук, он находится в hittstobject, который проверяется по EnterFrame. И когда объект попадает в зону hittest постоянно проигрывается один и тот же звук

Код AS3:

private function doorOn(e:Event):void
                {
                        var item:MovieClip;
                        for (i = 0; i < platformobj_2.length; i++)
                        {
                                if (platformobj_2[i].hitTestObject(bg))
                                {
                                        item = platformobj_2[i];
                                        var dok_s:Sound = new doors();
                                      dok_s.play();
 
                                }

Как его проиграть только один раз, а не каждые долисекунды пока объект в зоне хиттеста)?

samana 11.04.2014 23:59

Код писал тут, по этому не знаю о его возможных ошибках.

Код AS3:

import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
 
 
private var channel:SoundChannel;
 
private function doorOn(e:Event):void
{
        var item:MovieClip;
        for (i = 0; i < platformobj_2.length; i++)
        {
                if (platformobj_2[i].hitTestObject(bg))
                {
                        item = platformobj_2[i];
 
                        if (channel == null)
                        {
                                var dok_s:Sound = new doors();
                                channel = dok_s.play();
                                channel.addEventListener(Event.SOUND_COMPLETE, channel_soundComplete);
                        }
 
                }
        }
}
 
private function channel_soundComplete(e:Event):void
{
        channel.removeEventListener(Event.SOUND_COMPLETE, channel_soundComplete);
        channel.stop();
        channel = null;
}


Godwarlock 12.04.2014 00:51

Теперь проигрывается не каждую секунду, а через какой-то промежуток, но все равно если объект в зоне хиттеста, каждые там 3 секунды проигрывается один и тот же звук

samana 12.04.2014 12:18

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

private var canPlaySound:Boolean;
 
private function doorOn(e:Event):void
{
        // изначально мы не знаем о наличии столкновений
        var hit:Boolean = false;
 
        for (var i:int = 0; i < platformobj_2.length; i++)
        {
                //если столкновение произошло, то фиксируем это и выходим
                //из цикла, ведь достаточно схватить только один хитТест
                if (platformobj_2[i].hitTestObject(bg))
                {
                        hit = true;
                        break;
                }
        }
 
        //если столкновений так и небыло, то разрешаем звуку сыграть (в следующий раз).
        //То есть звук будет играть, только если в предыдущем фрейме небыло обнаружено ни одного
        //столкновения, а в текущем столкновение обнаружилось
        if (hit == false)
        {
                canPlaySound = true;
        }
 
 
        // если столкновение произошло и звук можно проиграть, то запускаем звук
        // и запрещаем звуку повторяться до тех пор, пока не обнаружится ни одного столкновения.
        if (hit && canPlaySound)
        {
                var s:Sound = new SoundClass();
                s.play();
                canPlaySound = false;
        }
}



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

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