Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.05.2013, 02:17
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 1  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
По умолчанию Не могу загрузить xml в Zinc

Добрый вечер
Дело какое -захотел освоить Zinc на таком уровне, чтобы можно было упаковывать некоторые приложения. При попытке до этого столкнулся с тем, что для подгрузки внешних файлов и видео надо использовать "местные" зинковские классы.
Долго искал, разбирался, как подключать библиотеки и т.д.. С горем пополам подключил, но понятия не имел с чего начать переделку проекта.
все мои поиски привели меня к такой строке
Код AS3:
loader.load(new URLRequest(mdm.Application.path+"that.xml"));
файл реально существует в директории флешки, но при компиляции мне выдает что неверный адрес.
Также при компиляции ругается на переменные событий (или на сами события, не пойму) , например
(e:Event).
В общем муть какая то. Мне всего то надо немного переписать проект, чтобы грузились нужные мне файлы из вне.
Но самое интересное ен понятно как этому научится самостоятельно. Их "guide" не раскрыл мне вообще ничего, большенство примеров приведены в AS2, а работаю я только с AS3.

В общем прошу помощи разобраться... кто вообще освоил это и как вы это сделали....??? Если даже xml не получается у меня загрузить, я вообще в растеряности

Добавлено через 56 часов 38 минут
интересно, 280 просмотров и никто никогда не задавался таким вопросом?

Старый 06.05.2013, 22:06
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Задавались и не раз во времена, когда здесь обсуждение цинка было популярно, поиск же есть..
По теме.
1.
Код AS3:
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. Не знаю, чем вам доки не угодили по цинку, лаконично, но по делу.
Код AS3:
var myTextData:String = mdm.FileSystem.loadFile("c:\\myFile.txt");
Тут чисто оболочка вам файл загрузит, причем синхронно. Код несколько проще, да? И работать будет хоть в AS2, хоть в AS3, без разницы, опять же, при условии, что путь валидный.
3.
Цитата:
файл реально существует в директории флешки, но при компиляции мне выдает что неверный адрес.
Также при компиляции ругается на переменные событий (или на сами события, не пойму) , например
(e:Event). В общем муть какая то.
Вы своими разъяснениями муть только усугубили, ибо не понятно вообще ничего, кто и чего при компиляции выдает и на что ругается?
Приведите пример проблемного кода и ошибки.
4. На чем собираете приложение? В смысле IDE какая, цинк какой?
5. И последнее. У цинка, в принципе, неплохое коммьюнити, форум хороший, есть масса готовых примеров. Если вы хотите нормально цинком пользоваться, а не блуждать в потемках, рекомендую потратить время на изучение.


Последний раз редактировалось alexcon314; 06.05.2013 в 22:20.
Старый 13.05.2013, 10:37
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 3  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
1. указываю я путь не по жесткому диску, а относительно проекта. То есть that.xml лежит в той же директории с swf и зинковским exe.
2. так оказывается одной строчкой идет загрузка? а я вставлял это в request. Ну вот опять же - откуда это знать если в доках такая скупая информация а в примерах черт ногу сломит
3. Ок, сделал я так как написали, эффект с событиями тот же.
Код AS3:
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"));
}
в этом случае при компиляции swf подсвечивается
private function init(e:Event = null):void с текстом ошибки
Код AS3:
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 примеров кот наплакал, а из того что есть ничего не понял, и ничто не касалось загрузки файла

Старый 13.05.2013, 20:29
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 4  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
У вас конфликт имен.
Для листенеров цинка везде пишите e:mdm.Event

Старый 14.05.2013, 10:07
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 5  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Ок. Попробуйте так. В FD создать проект AS3. В классе Main прописать
Код AS3:
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;
		}
 
	}
 
}
Чтобы избавиться от конфликта имен, имортируйте из mdm_swc требуемые классы, а не все подряд (import mdm.* - не корректно)
Вот так компилится нормально и текст из файла вполне отображается
Код AS3:
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;
		}
 
	}
 
}

Старый 15.05.2013, 10:55
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 6  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
ну вот какой то сдвиг есть - сделал частичный импорт классов, и конфликт с событиями ушел. Но вот в остальном....
вот незамысловатый тестовый xml
Код AS3:
<?xml version="1.0" encoding="utf-8" ?>
<data>
	<content>
		<tag>TEST</tag>
	</content>
</data>
тупо делаю copy paste ваш код, и тестовое поле не отображает ничего. При трейсе выдает пустую строку (даже не null, а просто пусто). В папке с флешкой я сделал и that.xml и that.txt. Пробовал и так и так.
+ко всему для взятия xml логично было бы написать
Код AS3:
var xml:XML				= new XML(mdm.FileSystem.loadFile("that.xml"));
trace (xml);
но и тут трейс выдает пустую строку, а trace (xml.children().length()); выдает 0.
Что то я вообще не вкуриваю...

Старый 15.05.2013, 12:40
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 7  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Попрежнему, у вас проблема с путями.
Код AS3:
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;
			}
		}
 
	}
 
}
xml-файл при таком подходе должен лежать в папке с ехе.


Последний раз редактировалось alexcon314; 15.05.2013 в 12:53.
Старый 15.05.2013, 13:11
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 8  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
Сейчас все заработало в оболочке.
Так оказывается что все эти модификации ссылок и загрузок под Zinc будут отображать содержимое только в оболочке? То есть варианта проверить работоспособность скриптов в самом SWf через FD возможности нету?

Страшно предположить как же тогда грузить не только xml а и все видео и внешние файлы..
Позвольте уточнить, про загрузки
Цитата:
"Тут чисто оболочка вам файл загрузит, причем синхронно."
Как понять синхронно? Если в флеше у нас вешается событие Complete, то как определяется когда загрузится в оболочке? не может же он (zinc) загрузить видео на 100 мб мгновенно по запросу.

Старый 15.05.2013, 14:05
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 9  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Цитата:
Сейчас все заработало в оболочке.
Как оказалось, проблема была не в путях . Нет, ну кто бы мог подумать...
Все mdm-классы работают исключительно в оболочке. На то она и оболочка, иначе нафига огород городить?
Цитата:
Страшно предположить как же тогда грузить не только xml а и все видео и внешние файлы..
Ну, во флеше-то вы как-то их собирались грузить? Что же тут страшного? Делайте проверку на существование файла, на валидность загруженных данных, IOError ловите в конце концов... стандартная рутина в любом приложении.
Не знаю как в четвертом цинке, но раньше у них была возможность дебажить приложение прямо из ехе, правда очень скромная такая возможность..
Вообще, можно определенным образом скомпоновать приложение, чтобы свести усилия по дебагу к минимуму, скажем, разделить функционал четко: это будет делать оболочка, это будет делать флеш.
Обернуть 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.
Старый 15.05.2013, 14:45
pomuс вне форума Посмотреть профиль Отправить личное сообщение для pomuс Найти все сообщения от pomuс
  № 10  
Ответить с цитированием
pomuс

Регистрация: Sep 2012
Сообщений: 204
так вот оно в чем дело в итоге! оказывается можно все также грузить внешние файлы и во флеше, просто с использованием
Код AS3:
mdm.Application.path + "myText.xml"
я же могу сделать так?
Код AS3:
var loader:Loader = new Loader();
loader.load(new URLRequest(mdm.Application.path + "myText.xml"));
loader.addEventListener(Event.COMPLETE, lalala);
это была моя самая первая мысль, и я так сначала и делал, но тут натолкнулся на конфликт Event , о котором писал выше, т.к. подключал весь пакет. И потом уже сутки прошарил все эти темы, форумы и гугл, в поисках объяснения. Вот кстати почему я и гвоорил, что доки у них ну просто караул, а вернее не доки, а вводная информация и туториалы

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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