Показать сообщение отдельно
Старый 13.10.2013, 14:54
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 3  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Судя по тому, что происходит в приложении, событие окончания загрузки файла из локального хранилища вообще не происходит.
Сейчас кину код класса.

Но, повторюсь, на компьютере все нижеприведенное работает без проблем.

Код AS3:
 
//Класс doXML, который проводит все операции с XML.
 
package com.instruments 
{
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.filesystem.File;
	import flash.filesystem.FileMode;
	import flash.filesystem.FileStream;
	import flash.display.MovieClip;
 
	public class doXML extends EventDispatcher
	{
		public static const SETTINGS_LOADED:String = "Settings is Loaded";
		private var loader:URLLoader;
		public var xml:XML;
 
		public function doXML()
		{
			trace("class doXML initialize();");
		}
 
		public function loadXML(path:String):void
		{
			trace("function doXML.loadXML();");
			loader = new URLLoader();
			loader.addEventListener(Event.COMPLETE, onLoadXML);
			loader.load(new URLRequest(path));
			loader.addEventListener(IOErrorEvent.IO_ERROR, createDoc);
		}
 
		private function createDoc(e:IOErrorEvent = null):void
		{
			trace("function doXML.createDoc();");
			var fileToCreate:File = File.applicationStorageDirectory;
			fileToCreate = fileToCreate.resolvePath("config.xml");
			var fileStream:FileStream = new FileStream();
			fileStream.open(fileToCreate, FileMode.WRITE);
			fileStream.writeUTFBytes("<?xml version=\"1.0\" encoding=\"utf-8\"?><configs><config><sound>true</sound><music>true</music><soundvalue>0.7</soundvalue><musicvalue>0.5</musicvalue><language>0</language> <!-- English 0, Russian 1 --> <progress>0</progress> </config></configs>")
			fileStream.close();
			this.loadXML(fileToCreate.nativePath);
		}
 
		private function onLoadXML(e:Event):void
		{
			trace("function doXML.onLoadXML();");
			xml = XML(loader.data);
			var xmlLoaded:Event = new Event(SETTINGS_LOADED);
			dispatchEvent(xmlLoaded);
		}
 
		public function getSettings():XML
		{
			trace("function doXML.getSettings();");
			return xml;
		}
 
		public static function saveSettings(settings:Array):void
		{
			trace("static function doXML.saveSettings();");
		}
	}
}
 
//Теперь код из кадра, который пользуется этим классом.
//ooXML - экземпляр класса doXML;
 
import com.game.*;
import flash.filesystem.File;
 
stop();
 
var path:File = File.applicationStorageDirectory;
path = path.resolvePath("config.xml");
 
showMenu();
 
ooXML.loadXML(path.nativePath);
ooXML.addEventListener(doXML.SETTINGS_LOADED, onSettingsLoad);
 
function onSettingsLoad(e:Event):void
{
	trace("function onSettingsLoad();");
	settingsXML = ooXML.getSettings(); // Получаем загруженные настройки в переменную settingsXML;
 
	menu.play(); // В приложении на телефоне этого не происходит, соответственно данное событие не было получено.
	//Если же убрать stop(); внутри меню, то меню анимируется. Иначе нет, тоесть этот код не выполняется.
 
	settingsList = settingsXML.config; // Эта переменная типа XMLList.
	currentProgress = settingsList.progress; // currentProgress:int
	titles = null; // Удаляем из памяти заставку приложения.
 
	var theSettings:Array = [settingsList.sound, settingsList.music, settingsList.soundvalue, settingsList.musicvalue, settingsList.language, settingsList.progress];
	settings.setSettings(theSettings); // Отсылаем классу Settings загруженные настройки.
}
 
function showMenu():void
{
	menu = new Menu();
	addChild(menu);
	menu.alpha = 0.6;
	Element.align(menu, "right");
	menu.y = 100; // Знаю, нехорошо.
}
 
var game:Game = new Game(settings, stage);