Как и каждый программист, я сталкиваюсь с сложной задачей, и я надеюсь, что кто-то может поделиться со мной некоторыми знаниями. Я создаю игру, и для каждого игрового компонента (например, аудио, видео, картинки) я создал swf-файл (библиотеку). В основном файле я пытаюсь загрузить мои swf-файлы с помощью класса Loader. Я хотел бы сделать preloader, и я хочу рассчитать процент байтов, загруженных из всех моих swf-файлов. Я понял, что загрузка 3 погрузчиков в одно и то же время замедляет игру. Я пытался загрузить один файл за раз, но я не знаю, как поймать байты, загруженные из моих файлов, без использования ProgressEvent (здесь я могу получить доступ к переменной bytesTotal). Кто-нибудь сталкивался с подобной проблемой и мог поделиться советом или ссылкой? С уважением и Страстная пятница!Загрузка нескольких файлов swf
ответ
I сильно рекомендовать вы GreenSock's LoaderMax библиотека. Это упрощает и улучшает весь процесс. Он легко настраивается и мал.
import com.greensock.*;
import com.greensock.loading.*;
import com.greensock.events.LoaderEvent;
import com.greensock.loading.display.*;
// Create a LoaderMax named "gameQueue" and bind onProgress, onComplete and onError listeners
var queue:LoaderMax = new LoaderMax({name:"gameQueue", onProgress:progressHandler, onComplete:completeHandler, onError:errorHandler});
// Append several loaders
queue.append(new XMLLoader("xml/data.xml", {name:"xmlDoc"}));
queue.append(new ImageLoader("img/photo1.jpg", {name:"photo1", estimatedBytes:2400, container:this, alpha:0, width:250, height:150, scaleMode:"proportionalInside"}));
queue.append(new SWFLoader("swf/child.swf", {name:"childClip", estimatedBytes:3000, container:this, x:250, autoPlay:false}));
queue.append(new MP3Loader("mp3/audio.mp3", {name:"audio", repeat:2, autoPlay:true}));
// Run
queue.load();
function progressHandler(event:LoaderEvent):void {
trace("progress: " + event.target.progress);
}
function completeHandler(event:LoaderEvent):void {
var image:ContentDisplay = LoaderMax.getContent("photo1");
TweenLite.to(image, 1, {alpha:1, y:100});
trace(event.target + " is complete!");
}
function errorHandler(event:LoaderEvent):void {
trace("error occured with " + event.target + ": " + event.text);
}
Вы можете отобразить прогресс отдельных погрузчиков или групп погрузчиков.
Для того, чтобы точно вычислить общий прогресс из группы грузчиков, это важно знать, общий размер файла (bytesTotal
) каждый ребенок погрузчика. Но если некоторые файлы еще не загрузились, как мог ваш загрузчик узнать их размеры?
Нет TCP packet
, который сообщит вам об окончательном размере при прогрессе.
Запомните: get - как поток. Вы никогда не узнаете окончательный размер, пока файл не будет готов!
new ImageLoader("1.jpg", {estimatedBytes:26000});
Простое решение:
Сформировать xml или json список, который содержит URL и общий размер каждого preloadable элемента. Вы можете сделать это с некоторой автоматизацией в php (например), проверьте это SO answer.
Предварительно загрузите файл xml/json с помощью LoaderMax и проанализируйте его в AS3.
Загрузите все файлы из xml и добавьте правильный размер файла. Вот и все.
Вы можете найти полную документацию по AS3 here.
Я проверил это вчера, cept0. Но когда он загружает несколько файлов, он не знает, какой размер у всех моих загрузчиков. Он загружает первый файл, пока он не достигнет 100%, следующий, второй файл и т. Д. Я видел это с помощью debuger. Есть ли способ LoaderMax загружать все файлы без перезапуска «progress value» в методе ProgressEvent? Извините, мой плохой английский. – rennanreis
Я отредактировал свой ответ. Надеюсь, они вам помогут. – mate64
Я попробую. Спасибо за помощь. – rennanreis
Начните загрузку файлов, получите размер файла и закройте поток сразу после получения информации о размере.
А затем загрузите файлы по одному, как вы хотели.
Или скомпилируйте свой основной swf с объединением в библиотеки кода (если это подходит вам).
Как скомпилировать мои основные файлы swf, объединенные в библиотеки кода user1875642? – rennanreis
Если ваши библиотеки содержат только активы (я думаю, это ваш случай), вы можете включить их в свой основной swf с вложением (http://actionscriptexamples.com/2008/10/26/embedding-images-into-a-flash -document-помощью-на-встраивать-метаданные /). Если в ваших библиотеках содержится какой-то код, который вы используете, тогда есть опция компилятора для объединения libs в код (http://help.adobe.com/en_US/flash/cs/using/WS3e7c64e37a1d85e1e229110db38dec34-7fa4a.html). – user1875642
- 1. Загрузка нескольких внешних SWF-файлов в основной swf
- 2. Загрузка внешних SWF-файлов
- 3. Загрузка и использование файлов SWF
- 4. Загрузка нескольких файлов ASP.NET
- 5. Vaadin - Загрузка нескольких файлов
- 6. Загрузка нескольких файлов свойств
- 7. Загрузка нескольких файлов Asp.Net
- 8. Загрузка нескольких файлов
- 9. Загрузка нескольких файлов Dex
- 10. Загрузка нескольких файлов Blueimp
- 11. AFNetworking загрузка нескольких файлов
- 12. Загрузка нескольких файлов
- 13. Загрузка ошибки нескольких файлов;
- 14. Загрузка нескольких файлов: массив
- 15. Загрузка нескольких файлов одновременно?
- 16. Загрузка нескольких файлов Codeigniter
- 17. Загрузка нескольких файлов Angularjs
- 18. Загрузка нескольких/больших файлов
- 19. Загрузка нескольких файлов JQuery
- 20. C# Загрузка нескольких файлов
- 21. HttpWebResponse загрузка нескольких файлов
- 22. PHP - Загрузка нескольких файлов
- 23. Проблема Загрузка AS2 SWF в AS3 SWF
- 24. Преобразование нескольких файлов SWF в Single EXE
- 25. AS 3 Добавление нескольких файлов .swf
- 26. PHP-загрузка нескольких файлов с использованием нескольких входов нескольких файлов
- 27. Загрузка нескольких файлов и обработчик
- 28. Загрузка нескольких файлов в SugerCRM
- 29. Загрузка нескольких файлов в Android
- 30. Загрузка нескольких файлов в grails
Вам нужно получить общее количество байтов swf загружено? –