![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Есть звук, он находится в hittstobject, который проверяется по EnterFrame. И когда объект попадает в зону hittest постоянно проигрывается один и тот же звук
Как его проиграть только один раз, а не каждые долисекунды пока объект в зоне хиттеста)? |
|
|||||
|
Код писал тут, по этому не знаю о его возможных ошибках.
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; } |
|
|||||
|
Регистрация: Jan 2012
Сообщений: 836
|
Теперь проигрывается не каждую секунду, а через какой-то промежуток, но все равно если объект в зоне хиттеста, каждые там 3 секунды проигрывается один и тот же звук
|
|
|||||
|
Хорошо, тогда такой вариант. Не знаю, насколько он выглядит логичным для вас, и хороший ли это способ. Скорее всего можно сделать и по другому.
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, время: 00:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|