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

Dip52 08.09.2013 15:56

Почему во время касания двух объектов не всегда воспроизводится звук?
 
Здравствуйте.

Цель: Сделать так, чтобы при касание двух объектов (главного персонажа и лазера-копья) воспроизводился звук.

Проблема: Звук воспроизводится, но не всегда или иногда воспроизводится, но с опаздыванием.

Класс "касание":
Код AS3:

package madness
{
        import flash.events.Event;
        import flash.display.MovieClip;
        import madness.effects.Sounds;
 
        public class Collision
        {
                public function Collision()
                {
                        Settings.stage.addEventListener(Event.ENTER_FRAME,collision);
                }
                private function collision(event:Event):void
                {
                        var laserlance:Array = Settings.laserlance;
                        const laserlanceLength:int = laserlance.length;
                        var mainPersona:MovieClip = Settings.mainPersona;
                        for(var e:int = 0; e < laserlanceLength; e++)
                        {
                                var ll:MovieClip = laserlance[e];
                                if(ll.hitTestObject(mainPersona))
                                {
                                        var alive:Boolean = laserlance[e].alive;
                                        if(alive)
                                        {
                                                Sounds.playCollisionLaserLanceAndMainPersona();
                                                laserlance[e].alive = false;
                                        }
                                }
                        }
                }
        }
}

Класс "звуки":
Код AS3:

package madness.effects
{
        import flash.media.Sound;
        import flash.net.URLRequest;
        import flash.net.URLLoader;
        import flash.media.SoundTransform;
        import flash.media.SoundChannel;
        import madness.Settings;
 
        public class Sounds
        {
                public static function playCollisionLaserLanceAndMainPersona():void
                {
                        var ur:URLRequest = new URLRequest('files/Laser-lance collision main persona.mp3');
                        var smp:Sound = new Sound(ur);
                        var sc:SoundChannel = new SoundChannel();
                        sc = smp.play();
                        sc.soundTransform = new SoundTransform(Settings.volumeCollisionLaserLanceAndMainPersona);
                }
        }
}


Bletraut 08.09.2013 23:44

Возможно потому что канал надо обнулять.

Dip52 09.09.2013 00:00

Цитата:

Сообщение от Bletraut (Сообщение 1145829)
Возможно потому что канал надо обнулять.

То есть, если у меня в этот момент (когда происходит касание) воспроизводится какой-либо посторонний\аналогичный звук, то я должен прекратить его воспроизведение?

belv 09.09.2013 00:19

Я думаю, что в данном случае более критично то, что Вы его каждый раз грузите по новой.

caseyryan 09.09.2013 07:46

Этот подход вообще не верный. Для звуков можно было бы создать класс со статическими методами, где сразу создать все необходимые звуки в одном экземпляре, а потом при вызове метода просто дергать soundChannel.play() вместо создания нового звука и канала

belv 09.09.2013 12:14

Еще лучше использовать dispatchEvent в классе Collision, а в классе Sounds слушать это событие, а не жестко связывать с методами класса Sounds.


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

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