Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   [Алгоритмы] Звуки в swf (http://www.flasher.ru/forum/showthread.php?t=215750)

pachok89 08.02.2020 21:49

Звуки в swf
 
Всем привет! Работаем над игрой и остался один баг который отделяет от релиза
TTT.swf основная, грузит в себя по очереди две swf: TSwf1 и TSwf2.

В TSwf1 и TSwf2 проигрываются по звук, звук подключен как swc, название звука совпадает в двух разных swc но звуки разные.
Ожидаемое поведение: поскольку мы грузим разные swf у которых разные swc, звуки должны быть разными не смотря на одинаковые названия. Реальное поведение: в TSwf2 играет звук с TSwf1.

Main.as
Код AS3:

package nord
{
import flash.utils.setTimeout;
import nord.connect.ITest;
import flash.display.DisplayObjectContainer;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
 
/**
 * ...
 * @author DANIIL_NALETOV
 */

public class Main extends MovieClip
{ 
 private var currentLdr:Loader;
 private var currentSwf:DisplayObjectContainer;
 
 public function Main()
 {
 
  addEventListener(Event.ADDED_TO_STAGE, init);
 }
 
 private function init(e:Event):void
 { 
  loadSwf("TSwf1");
 
  setTimeout(function()
  {
  stage.removeChild(currentSwf);
  currentLdr.unloadAndStop();
  currentLdr = null;
  currentSwf = null;
 
  setTimeout(function()
  {
    loadSwf("TSwf2");
  }, 1000);
 
  }, 5000);
 }
 
 public function loadSwf(name:String):void
 { 
  trace("LoadRequest: " + name + ".swf");
 
  currentLdr = new Loader();
  var req:URLRequest = new URLRequest(name+".swf");
  var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
  currentLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
 
  currentLdr.load(req, ldrContext);
 }
 
      private function completeHandler(event:Event):void
 {
  currentLdr.contentLoaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
 
  currentSwf = currentLdr.content as DisplayObjectContainer;
  stage.addChild(currentSwf);
 }
}
 
}

ITest.as
Код AS3:

package nord.connect
{
 
/**
 * ...
 * @author DANIIL_NALETOV
 */

public interface ITest
{
 function doIt(data:Object = null):void;
}
}

Исходник https://shapikthequest.com/data/test.zip

СлаваRa 12.02.2020 13:09

Грузить звуки в разные AppDomain, что не будет работать на ios, или изменить подход, например выгружать предыдущую swf или использовать уникальные имена.

caseyryan 12.02.2020 17:40

А для чего вообще такие заморочки? Самый лучший вариант - переименовать звуки так, чтобы не было совпадений. Например play_swf1.mp3 и play_swf2.mp3
Все равно же известен момент загрузки новой swf, значит и команду на смену суффикса в имени можно передать


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

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