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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Jul 2011
Сообщений: 79
По умолчанию XML и Embed

Здравствуйте.

Есть такой код:
Код AS3:
	public class Main extends Sprite	
	{
	 [Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class; 
	 private var sc:Scene;
		public function Main()
		{
			var file:ByteArray = ((new EmbedModel()) as ByteArray);
			var str:String = file.readUTFBytes( file.length );
			var xml:XML = new XML( str );
			sc = new Scene(xml);
			stage.addChild(sc);
Хочу перенести этот код:
Код AS3:
var file:ByteArray = ((new EmbedModel()) as ByteArray);
			var str:String = file.readUTFBytes( file.length );
			var xml:XML = new XML( str );
В класс Scene.В классе документ будет производится следующее: (а в классе сделать функцию в которой будет исполняться код выше).
Код AS3:
 [Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class; 
	 private var sc:Scene;
		public function Main()
		{
			sc = new Scene(new EmbedModel());
			stage.addChild(sc);
Можно ли так делать?Если можно,то что нужно в конструкторе прописать (какого типа будет переменная будет передана).

Возможно ли такое?

Старый 07.08.2011, 21:21
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 2  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
я же уже говорил конструктор класса Scene принимает XML.
что Вы уже пробовали сделать и что не получается(какие ошибки)?
__________________
местонахождение

Старый 07.08.2011, 21:32
savva вне форума Посмотреть профиль Отправить личное сообщение для savva Найти все сообщения от savva
  № 3  
Ответить с цитированием
savva

Регистрация: Jul 2011
Сообщений: 79
Код:
sc = new Scene(new EmbedModel());
В этом случае принимает XML ?

Вот такая ошибка:
Код:
TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать Main_EmbedModel@86148c9 в XML.
	at Main()
конструктор пока что такой:
Код AS3:
public function Scene (_xml:XML) {
			myxml = _xml;
			addEventListener(Event.ADDED_TO_STAGE, Init);
		}
Что мне нужно прописать в параметрах конструктора,чтобы я мог передать
Код:
new Scene(new EmbedModel());
и уже в конструкторе сделать вызов функции:
Код AS3:
	private function GetXml(/*КАКОЙ ТУТ ПАРАМЕТР ДОЛЖЕН БЫТЬ?*/):XML
		{
			var file:ByteArray = (/*new EmbedModel()*/ as ByteArray);
			var str:String = file.readUTFBytes( file.length );
			var xml:XML = new XML( str );
		}
А конструктор должен быть таким получится примерно
Код AS3:
public function Scene (/*какой-то параметр чтобы передать new EmbedModel()*/) {
			myxml = GetXML(/*new EmbedModel()*/);
			addEventListener(Event.ADDED_TO_STAGE, Init);
		}


Последний раз редактировалось savva; 07.08.2011 в 21:37.
Старый 07.08.2011, 21:46
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Вы же знаете, что new EmbedModel() as ByteArray
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 07.08.2011, 22:08
savva вне форума Посмотреть профиль Отправить личное сообщение для savva Найти все сообщения от savva
  № 5  
Ответить с цитированием
savva

Регистрация: Jul 2011
Сообщений: 79
Сделал вот так:
Код AS3:
sc = new Scene(new EmbedModel() as ByteArray);
но хочется чтобы было как можно меньше телодвижений. Чтобы просто прописать
Код AS3:
sc = new Scene(new EmbedModel());

Старый 07.08.2011, 22:17
saikspaik вне форума Посмотреть профиль Отправить личное сообщение для saikspaik Найти все сообщения от saikspaik
  № 6  
Ответить с цитированием
saikspaik

Регистрация: Nov 2009
Сообщений: 300
Посмотри эту тему, может поможет.

Старый 07.08.2011, 22:17
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS3:
public function Scene (xml:ByteArray) {
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 08.08.2011, 02:22
savva вне форума Посмотреть профиль Отправить личное сообщение для savva Найти все сообщения от savva
  № 8  
Ответить с цитированием
savva

Регистрация: Jul 2011
Сообщений: 79
Цитата:
Сообщение от dimarik Посмотреть сообщение
Код AS3:
public function Scene (xml:ByteArray) {
Спасибо,я так и писал,просто не думал что можно будет сразу делать так :
Код AS3:
sc = new Scene(new EmbedModel());
Вопрос решён,спасибо.

Старый 08.08.2011, 04:16
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 9  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Никогда не делал через байтаррей. Решил провести тест.

Код AS3:
public class xmlTest extends Sprite {
    [Embed(source = "example.xml", mimeType="application/octet-stream")] private static const EXAMPLE_XML: Class;
    public function xmlTest() {
 
      var start   : Number;
      var now     : Number;
      var counter : int;
 
      // test 1
      start = getTimer();
      for(counter = 0; counter < 10000; counter++){
        getXML_1();  
      }
      now = getTimer();
 
      trace("get xml var 1 time : " + (now - start));
 
      // test 2
      start = getTimer();
      for(counter = 0; counter < 10000; counter++){
        getXML_2();  
      }
 
      now = getTimer();
 
      trace("get xml var 2 time : " + (now - start));
    }
 
    private function getXML_1():XML{
      return XML(new String(new EXAMPLE_XML()));  
    }
 
    private function getXML_2():XML{
      var file : ByteArray = new EXAMPLE_XML(); 
      var str  : String = file.readUTFBytes( file.length );
      var xml  : XML = new XML( str );      
      return xml;
    }
Результат:

Код:
get xml var 1 time : 4894
get xml var 2 time : 5091
если поменять тесты местами, то разрыв больше:

Код:
get xml var 2 time : 5696
get xml var 1 time : 5018

Проводил тест раз 20, чтобы быть уверенным.
Ввиду таких результатов по скорости мне кажется излишним возится с вариантом с ByteArray.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 08.08.2011, 09:24
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 10  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Не заметил таких фатальных провалов.
Вот результат:
Код:
[ 1] Player: [WIN 10.3.181.34 RELEASE]
[ 2] 
[ 3] Test started..
[ 4] get xml var 1 time : 13494
[ 5] get xml var 2 time : 13634
[ 6] get xml var 3 time : 10530
[ 7] Test finished.
[ 8] 
[ 9] Test started..
[10] get xml var 1 time : 13759
[11] get xml var 2 time : 14040
[12] get xml var 3 time : 10593
[13] Test finished.
[14] 
[15] Test started..
[16] get xml var 1 time : 13962
[17] get xml var 2 time : 14306
[18] get xml var 3 time : 10889
[19] Test finished.
[20] 
[21] Test started..
[22] get xml var 1 time : 13994
[23] get xml var 2 time : 14086
[24] get xml var 3 time : 10624
[25] Test finished.
Вот тест:
Код AS3:
/**																		
 * File created: '08.08.2011 8:11 AM'								
 *																	
 * @author i.o.														
 * @version 1.0														
 */
 
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.system.Capabilities;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.utils.ByteArray;
	import flash.utils.getTimer;
 
	[SWF(width='800', height='600', scriptTimeLimit='300')]
	public class XmlCreationTest extends Sprite 
	{
		[Embed(source = "example.xml", mimeType="application/octet-stream")]
		private static const EXAMPLE_XML_ASSET : Class;
		private static const EXAMPLE_XML_STRING : String = ((new EXAMPLE_XML_ASSET() as ByteArray).readUTFBytes((new EXAMPLE_XML_ASSET() as ByteArray).length));
 
 
		public function XmlCreationTest() 
		{
			if (stage)
				this._init();
			else
				this.addEventListener(Event.ADDED_TO_STAGE, this._init);
		}
 
 
		///
		private var _txtLog : TextField;
		///
		private var _logMsgCount : uint = 0;
		///
		private var _logMsgCountCharWidth : uint = 2;
 
 
		///
		public function log( msg:String="" ) : void 
		{
			this._logMsgCount++;
 
			var count:String = "    " + this._logMsgCount.toString();
			count = count.substr(count.length - this._logMsgCountCharWidth, this._logMsgCountCharWidth);
 
			this._txtLog.appendText((this._logMsgCount > 1 ? "\n" : "") + "[" + count + "] " + msg);
		}
 
		///
		private function _init( e:Event=null ) : void 
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, this._init);
			// entry point
 
			this.stage.addEventListener(MouseEvent.CLICK, this._test);
 
			var tf:TextFormat = new TextFormat("Courier New", 11);
			this._txtLog = new TextField();
			this._txtLog.x = 10.0;
			this._txtLog.y = 30.0;
			this._txtLog.width = 800.0 - 20;
			this._txtLog.height = 600.0 - 40;
			this._txtLog.border = true;
			this._txtLog.defaultTextFormat = tf;
			this._txtLog.setTextFormat( tf );
			this.addChild( this._txtLog );
 
			tf = new TextFormat("Arial", 16, 0xFF0000, true, true);
			var txtHeader:TextField = new TextField();
			txtHeader.x = 10.0;
			txtHeader.y = 3.0;
			txtHeader.width = 800.0 - 20;
			txtHeader.height = 30;
			txtHeader.defaultTextFormat = tf;
			txtHeader.setTextFormat( tf );
			txtHeader.text = "Click on screen to start a test.";
			this.addChild( txtHeader );
 
			var playerVersion:String = Capabilities.version.replace(/,/g, '.');
			var playerKind:String = Capabilities.isDebugger ? "DEBUG" : "RELEASE";
			var playerInfo:String = "[" + playerVersion + " " + playerKind + "]";
 
			txtHeader.appendText("  " + playerInfo);
			log("Player: " + playerInfo );
 
			this._test();
		}
 
		///
		private function _test( ...args ) : void 
		{
			log();
			log("Test started..");
 
			var start   : Number;
			var now     : Number;
			var counter : int;
			var targetLoops:int = 10000;
 
			// test 1
			start = getTimer();
			for(counter = 0; counter < targetLoops; counter++)
				getXML_1();
			now = getTimer();
			log("get xml var 1 time : " + (now - start));
 
			// test 2
			start = getTimer();
			for(counter = 0; counter < targetLoops; counter++)
				getXML_2();  
			now = getTimer();
			log("get xml var 2 time : " + (now - start));
 
			// test 3
			start = getTimer();
			for(counter = 0; counter < targetLoops; counter++)
				getXML_3();  
			now = getTimer();
			log("get xml var 3 time : " + (now - start));
 
			log("Test finished.");
		}
 
		///
		private function getXML_1() : XML
		{
		  return XML(new String(new EXAMPLE_XML_ASSET()));  
		}
 
		///
		private function getXML_2() : XML
		{
		  var file : ByteArray = new EXAMPLE_XML_ASSET(); 
		  var str  : String = file.readUTFBytes( file.length );
		  var xml  : XML = new XML( str );      
		  return xml;
		}
 
		///
		private function getXML_3() : XML
		{
		  return new XML(EXAMPLE_XML_STRING);  
		}
 
	}
 
}
Вот XML:
example.rar

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

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

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


 


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


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