Самый простой способ - использовать технику под названием double buffering
, используя два Loaders
- один для изображения, которое является видимым, и один для изображения, которое загружается и невидимо. Когда изображение завершило загрузку, оно становится видимым, а другое становится невидимым, и процесс повторяется.
С точки зрения эффективности, было бы лучше, по крайней мере, использовать сокетное соединение с сервером для передачи байтов изображения, предпочтительно в формате AMF, поскольку оно имеет незначительные накладные расходы. Это все вполне возможно в BlazeDS с некоторыми сценариями.
Для повышения эффективности вы можете попробовать использовать в режиме реального времени фрейм или видеокодер на сервере, однако декодирование видео на клиенте будет сложной задачей. Для лучшей производительности будет лучше использовать встроенный видеодекодер и потоковый сервер, такой как Flash Media Server.
ОБНОВЛЕНИЕ (пример сценария):
В этом примере загружаются изображения по HTTP. Более эффективный подход - использовать сокет AMF (упомянутый выше) для передачи изображения, а затем использовать Loader.loadBytes () для его отображения.
private var loaderA:Loader;
private var loaderB:Loader;
private var foregroundLoader:Loader;
private var backgroundLoader:Loader;
public function Main()
{
loaderA = new Loader();
loaderB = new Loader();
foregroundLoader = loaderA;
backgroundLoader = loaderB;
loadNext();
}
private function loadNext():void
{
trace("loading");
backgroundLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler);
backgroundLoader.load(new URLRequest("http://www.phpjunkyard.com/randim/randim.php?type=1"));
}
private function loaderCompleteHandler(event:Event):void
{
trace("loaded");
var loaderInfo:LoaderInfo = event.target as LoaderInfo;
var loader:Loader = loaderInfo.loader;
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderCompleteHandler);
if (contains(foregroundLoader))
removeChild(foregroundLoader);
var temp:Loader = foregroundLoader;
foregroundLoader = backgroundLoader;
backgroundLoader = temp;
addChild(foregroundLoader);
loadNext();
}