|
|
|||||
Регистрация: Sep 2012
Сообщений: 204
|
Не могу загрузить xml в Zinc
Добрый вечер
Дело какое -захотел освоить Zinc на таком уровне, чтобы можно было упаковывать некоторые приложения. При попытке до этого столкнулся с тем, что для подгрузки внешних файлов и видео надо использовать "местные" зинковские классы. Долго искал, разбирался, как подключать библиотеки и т.д.. С горем пополам подключил, но понятия не имел с чего начать переделку проекта. все мои поиски привели меня к такой строке файл реально существует в директории флешки, но при компиляции мне выдает что неверный адрес. Также при компиляции ругается на переменные событий (или на сами события, не пойму) , например (e:Event). В общем муть какая то. Мне всего то надо немного переписать проект, чтобы грузились нужные мне файлы из вне. Но самое интересное ен понятно как этому научится самостоятельно. Их "guide" не раскрыл мне вообще ничего, большенство примеров приведены в AS2, а работаю я только с AS3. В общем прошу помощи разобраться... кто вообще освоил это и как вы это сделали....??? Если даже xml не получается у меня загрузить, я вообще в растеряности Добавлено через 56 часов 38 минут интересно, 280 просмотров и никто никогда не задавался таким вопросом? |
|
|||||
listener
|
Задавались и не раз во времена, когда здесь обсуждение цинка было популярно, поиск же есть..
По теме. 1. package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; public class Main extends Sprite { var loader:URLLoader = new URLLoader(); public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point loader.addEventListener(Event.COMPLETE, onLoad); loader.load(new URLRequest("c:\\myFile.txt")); } private function onLoad(e:Event):void { trace(loader.data); } } } выражение (mdm.Application.path+"that.xml") дает действительно валидный путь. Ну, и о том что загрузка файлов во флеше асинхронно происходит, конечно, тоже надо помнить. На то в примере присутствует обработчик события Event.COMPLETE, заметьте. 2. Не знаю, чем вам доки не угодили по цинку, лаконично, но по делу. Тут чисто оболочка вам файл загрузит, причем синхронно. Код несколько проще, да? И работать будет хоть в AS2, хоть в AS3, без разницы, опять же, при условии, что путь валидный. 3. Цитата:
Приведите пример проблемного кода и ошибки. 4. На чем собираете приложение? В смысле IDE какая, цинк какой? 5. И последнее. У цинка, в принципе, неплохое коммьюнити, форум хороший, есть масса готовых примеров. Если вы хотите нормально цинком пользоваться, а не блуждать в потемках, рекомендую потратить время на изучение. Последний раз редактировалось alexcon314; 06.05.2013 в 22:20. |
|
|||||
Регистрация: Sep 2012
Сообщений: 204
|
1. указываю я путь не по жесткому диску, а относительно проекта. То есть that.xml лежит в той же директории с swf и зинковским exe.
2. так оказывается одной строчкой идет загрузка? а я вставлял это в request. Ну вот опять же - откуда это знать если в доках такая скупая информация а в примерах черт ногу сломит 3. Ок, сделал я так как написали, эффект с событиями тот же. public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); tf = new TextField(); addChild(tf); var myTextData:XML= new XML(mdm.FileSystem.loadFile("that.xml")); } private function init(e:Event = null):void с текстом ошибки Can not resolve a multiname reference unambiguously. mdm:Event (from C:\Users\Home\Desktop\testZinc\lib\mdm_swc.swc(mdm:Event)) and flash.events:Event (from C:\Program Files (x86)\FlashDevelop\Tools\flexsdk\frameworks\libs\player\10.1\playerglobal.swc(flash.events:Event)) are available. C:\Users\Home\Desktop\testZinc\src\Main.as(25): col: 27 Error: Type was not found or was not a compile-time constant: Event. private function init(e:Event = null):void 4. собираю в FlashDevelop. И вот еще про "доки" цинка.... ни слова о подключении к flashDevelop. Нашел инфу тут, на форуме, где написано что надо разместить swc в папке library в самом develop. Разместил, испортировал -- ничего не видит. Получилось только после того как подключил сам swc в библиотек проекта (/lib) 5. скачал и пересмотрел все "примеры". Как я и писал уже , с as3 примеров кот наплакал, а из того что есть ничего не понял, и ничто не касалось загрузки файла |
|
|||||
listener
|
Ок. Попробуйте так. В FD создать проект AS3. В классе Main прописать
package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; import mdm.* /** * ... * @author */ public class Main extends Sprite { private var tf:TextField = new TextField(); public function Main():void { if (stage) init(); else addEventListener(flash.events.Event.ADDED_TO_STAGE, init); } private function init(e:flash.events.Event = null):void { removeEventListener(flash.events.Event.ADDED_TO_STAGE, init); // entry point addChild(tf); tf.x = tf.y = 0; tf.width = stage.stageWidth; tf.height = stage.stageHeight; mdm.Application.init(); mdm.Dialogs.prompt("Hello World!"); var myTextData:String = new XML(mdm.FileSystem.loadFile("myfile.txt")); tf.text = myTextData; } } } Вот так компилится нормально и текст из файла вполне отображается package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; import mdm.Dialogs; import mdm.FileSystem; /** * ... * @author */ public class Main extends Sprite { private var tf:TextField = new TextField(); public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point addChild(tf); tf.x = tf.y = 0; tf.width = stage.stageWidth; tf.height = stage.stageHeight; mdm.Application.init(); mdm.Dialogs.prompt("Hello World!"); var myTextData:String = new XML(mdm.FileSystem.loadFile("myfile.txt")); tf.text = myTextData; } } } |
|
|||||
Регистрация: Sep 2012
Сообщений: 204
|
ну вот какой то сдвиг есть - сделал частичный импорт классов, и конфликт с событиями ушел. Но вот в остальном....
вот незамысловатый тестовый xml <?xml version="1.0" encoding="utf-8" ?> <data> <content> <tag>TEST</tag> </content> </data> +ко всему для взятия xml логично было бы написать но и тут трейс выдает пустую строку, а trace (xml.children().length()); выдает 0. Что то я вообще не вкуриваю... |
|
|||||
listener
|
Попрежнему, у вас проблема с путями.
package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; import mdm.Dialogs; import mdm.FileSystem; import mdm.Application; /** * ... * @author */ public class Main extends Sprite { private var tf:TextField = new TextField(); public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point addChild(tf); tf.x = tf.y = 0; tf.width = stage.stageWidth; tf.height = stage.stageHeight; var path:String = mdm.Application.path + "myText.xml"; //var path:String = "myText.xml"; mdm.Application.init(); if (!mdm.FileSystem.fileExists(path)) { mdm.Dialogs.prompt("XML file '" + path + "' not found!"); } else { var myTextData:XML = new XML(mdm.FileSystem.loadFile(path)); tf.text = myTextData; } } } } Последний раз редактировалось alexcon314; 15.05.2013 в 12:53. |
|
|||||
Регистрация: Sep 2012
Сообщений: 204
|
Сейчас все заработало в оболочке.
Так оказывается что все эти модификации ссылок и загрузок под Zinc будут отображать содержимое только в оболочке? То есть варианта проверить работоспособность скриптов в самом SWf через FD возможности нету? Страшно предположить как же тогда грузить не только xml а и все видео и внешние файлы.. Позвольте уточнить, про загрузки Цитата:
|
|
|||||
listener
|
Цитата:
Все mdm-классы работают исключительно в оболочке. На то она и оболочка, иначе нафига огород городить? Цитата:
Не знаю как в четвертом цинке, но раньше у них была возможность дебажить приложение прямо из ехе, правда очень скромная такая возможность.. Вообще, можно определенным образом скомпоновать приложение, чтобы свести усилия по дебагу к минимуму, скажем, разделить функционал четко: это будет делать оболочка, это будет делать флеш. Обернуть mdm-классы в свой флешовый класс, который будет именно нужным вам образом взаимодействовать с вашими классами, а не разбрасывать по-всюду вызовы mdm-объектов.. ну, или как-то так... Что касается загрузки внешних файлов - да, можно грузить стандартно, флешовым лоадером, а через mdm-классы только определять путь к файлу, ибо флеш так не может. А можно грузить через оболочку, т.е. через методы mdm-классов. Тут выбор за вами. Как понять синхронно? Так и понимать, собственно. Вызов mdm.FileSystem.loadFile() вернет вам содержимое файла в той же строчке кода. Это не значит, что огроменный файл загрузится сию же секунду, это означает, что выполнение кода приостановится до окончания загрузки. И, как следствие, может притормозить интерфейсная графика. Во флеше загрузка реализована асинхронно, т.е. после вызова loader.load(new URLRequest("c:\\myFile.txt")) сразу же будет выполнена следующая инструкция в коде, не будет ожидания окончания загрузки. О ее завершении вас известит специальное событие Event.COMPLETE, на которое надо не забыть подписаться до началда загрузки и только в его обработчике уже будут доступны загруженные данные. Т.е. схема несколько сложнее, зато без тормозов. Впрочем, у цинка что-то тоже было асинхронное, сейчас точно не скажу... надо порыться в доках. UPD/ Неа... там только FileSystem.appendFileAsync(), FileSystem.copyFileAsync(), FileSystem.deleteFileAsync(), что касается файлов. mdm.FileSystem.loadFileAsync() не наблюдается, видимо, потому, что это есть и так во флеше. Последний раз редактировалось alexcon314; 15.05.2013 в 14:29. |
|
|||||
Регистрация: Sep 2012
Сообщений: 204
|
так вот оно в чем дело в итоге! оказывается можно все также грузить внешние файлы и во флеше, просто с использованием
я же могу сделать так? это была моя самая первая мысль, и я так сначала и делал, но тут натолкнулся на конфликт Event , о котором писал выше, т.к. подключал весь пакет. И потом уже сутки прошарил все эти темы, форумы и гугл, в поисках объяснения. Вот кстати почему я и гвоорил, что доки у них ну просто караул, а вернее не доки, а вводная информация и туториалы |
Часовой пояс GMT +4, время: 09:29. |
|
« Предыдущая тема | Следующая тема » |
|
|