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

Torero 07.10.2007 03:15

Загрузка данных из внешних файлов.
 
Доброго времени суток.
Есть несколько классов, загружающих информацию(xml, текст, картинки, swf) из внешних файлов. Решил процесс загрузки описать отдельным классом - не получается. Подскажите пжл.как это правильно реализовать:
а)Верна-ли вообще сама идея реализовать загрузчик через отдельный класс?
б)Конструктор не может быть сеттером - как передать данные объекту, вызвавшему класс? через "this"?
в)Как реализовать ожидание окончания загрузки?

Вот мой вариант: (нерабочий)
Код:

package {
import flash.display.Sprite;
        public class SomeClass extends Sprite {
                public function SomeClass(){
                        var myXML:XML = new XML();
                        myXML=XML(new FileLoad("test.xml"));
                        trace("Загрузили:"+myXML); //Загрузили: [object FileLoad], а не "Загрузили: <xx>.....</xx>"
                }
        }

Код:

package {
import flash.display.Loader;
import flash.net.URLRequest;
        public class FileLoad extends Loader {
                public function FileLoad(filepath:String){
                        var urlReq:URLRequest = new URLRequest(filepath);
                        this.load(urlReq);
                }
        }


Nirth 07.10.2007 03:19

1) Да
1.1) Класс flash.display.Loader создан для загрузки визуальной информации(swf, jpg, png). тебе нужно юзать flash.net.URLLoader
2) Дело вкуса, я считаю это лишними 500 миллисекундами затрачеными на ненужный апендикс.
3) через события.

Torero 07.10.2007 03:42

2 Nirth:Спасибо за быстрый ответ.
А)
Цитата:

Сообщение от Nirth
1.1) Класс flash.display.Loader создан для загрузки визуальной информации(swf, jpg, png). тебе нужно юзать flash.net.URLLoader

То есть мне прийдется создать 2 класса: TextLoad и GraphLoad? или можно безболезненно это одним классом реализовать?

Цитата:

Сообщение от Nirth
2) Дело вкуса, я считаю это лишними 500 миллисекундами затрачеными на ненужный апендикс.

не в производительности дело.. объем кода минимизирую и писАть правильно учусь..
Б)
Цитата:

Сообщение от Nirth
3) через события.

Это понятно.. Вопрос в том как? События надо внутри класса-загрузчика прописывать или в том классе из которого этот загрузчик вызывается?

Исправил код загрузчика - все-равно не выдает нужный результат.

Код:

package {
import flash.display.Loader;
import flash.net.URLRequest;
        public class TextLoad extends URLLoader {
                public function TextLoad(filepath:String){
                        var urlReq:URLRequest = new URLRequest(filepath);
                        this.load(urlReq);
                }
        }
}

Код:

...
        myXML=XML(new TextLoad("test.xml"));
        trace("Загрузили: "+myXML);        //Загрузили: [object TextLoad]
...


etc 07.10.2007 10:44

а) Зачем?
б) Конструктор — это функция, которая может иметь параметры;
в) Событиями.

В целом, писать отдельный класс для этого не вижу нужды.

Nirth 07.10.2007 13:50

Цитата:

не в производительности дело.. объем кода минимизирую и писАть правильно учусь..
Я считаю не правильным тратить 500 миллисекунд на ненужный аппендикс.
Тоесть я считаю не правильным писать this
у __etc другое мнение.

Цитата:

Исправил код загрузчика - все-равно не выдает нужный результат.
Ну и что должен быть за результат?

Цитата:

То есть мне прийдется создать 2 класса: TextLoad и GraphLoad? или можно безболезненно это одним классом реализовать?
Зависит от объема кода, если ты собираешься парсить текст, валидировать, проверять че нить там, или выдерать отдельные куски. То писать стоит.

Если просто грузить файлы то URLLoader уже существует, он отлично грузит файлы.

Torero 07.10.2007 14:21

Цитата:

Сообщение от __etc
В целом, писать отдельный класс для этого не вижу нужды.

А разве многократный импорт не есть зло?

Цитата:

Сообщение от Nirth
Ну и что должен быть за результат?

В данном случае - XML из файла, а не [object TextLoad].

etc 07.10.2007 14:31

Многократный импорт? :)))
Директива import лишь указывает компилятору на то, какие области видимости классов нужно создать и все. Перед выполнением кода создается так называемый scope-стек, в котором хранятся все области видимости классов.
И, если уж рассуждать логически, то от отдельного класса станет меньше импортов? Нет, не станет, будет столько же + одна штука.
Выполнять непосредственную загрузку данных-то кто будет? Да все те же встроенные классы.
Идея одного интерфейса хороша, но её уже выполняет URLLoader, который может грузить данные в различных форматах, как в текстовых, так и бинарных. Что делать с полученными данными — решать программисту.

Nirth 07.10.2007 15:04

Цитата:

В данном случае - XML из файла, а не [object TextLoad].
для этого надо переопределить метод toString()...

screamge 07.10.2007 15:15

У меня лоудер вынесен в отдельный класс исключетельно из соображения использования одного прелоудера во всём проекте и грузит он при вызове статичного метода loadmc в который передаётся адрес мувика в который нужно грузить или имя клипа который нужно создать, меторасположение лоудера (_х, _у) или булево значение отвечающее за вывод клипа лоудера по центру созданного/указанного мувика. В принципе удобно.

etc 07.10.2007 15:24

Цитата:

Сообщение от screamge
У меня лоудер вынесен в отдельный класс исключетельно из соображения использования одного прелоудера во всём проекте и грузит он при вызове статичного метода loadmc в который передаётся адрес мувика в который нужно грузить или имя клипа который нужно создать, меторасположение лоудера (_х, _у) или булево значение отвечающее за вывод клипа лоудера по центру созданного/указанного мувика. В принципе удобно.

Дядь, мы в разделе AS3 =)


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

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