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

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

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

Регистрация: Jul 2011
Сообщений: 79
По умолчанию Игнорирование некоторых полей XML

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

Такой вопрос.
есть XML

Код AS3:
<bjects>
			<object x="0" y="0" z="0" event="true" animation="true" visible="true">
				<name>rocket</name>
				<model>parsingmodel/raketa.A3D</model>
				<textures>
					<texture x="-1536.21" y="0" z="70.2191">
						<texturesrc>parsingmodel/rocket_rkn_02_white.jpg</texturesrc>
						<color>0x0000FF</color>
						<textureobj>Golova_L</textureobj>
						<text>parsingmodel/golova.txt</text>
					</texture>
Вопрос такой.Если я какое-нибудь поле не заполню вообще(то есть даже тегов не будет),то при парсинге будет ошибка.
Просто не хочется нагружать XML лишними данными и дополнительными строками.
Потому что если например

Код:
//если
event="false"
//то мне нужны следующие строки
<color>0x0000FF</color>
<textureobj>Golova_L</textureobj>
Соотвествено,как сделать так чтобы не писать лишние строки(это будет писать моделер XML файл а я просто буду добавлять ссылку в embed и всё будет работать).И соответственно меньше строк-меньше парсить-меньше вес.НУ и моделеру делать проще.

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Можно воспользоваться оператором in
Код AS3:
trace( "@animation" in xml.object);// true
trace( "@bar" in xml.object);// false
trace( "textures" in xml.object);// true
trace( "foo" in xml.object);// false
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 03.08.2011, 16:39
savva вне форума Посмотреть профиль Отправить личное сообщение для savva Найти все сообщения от savva
  № 3  
Ответить с цитированием
savva
[+ 06.08.11]

Регистрация: Jul 2011
Сообщений: 79
У меня есть промежуточный класс ObjectItem
Код AS3:
public class ObjItem extends Object 
	{
		//Имя контейнера
		public var objName:String; 
		// URL модели 
		public var urlModel:String; 
		// Массив текстур (URL)
		public var urlTextures:Array; 
		// Массив имён объектов к которым прикрепляются текстуры
		public var textureObjs:Array; 
		//Массив цветов для подсветки объектов 
		public var colorObjs:Array;
		//Массив координат для каждого объекта
		public var textureCoords:Array; 
		//Координаты контейера
		public var coord:Vector3D; 
		//Описание для каждого объекта
		public var textObjs:Array; 
		//Нужны ли объекту события 
		public var needEvent:Boolean;
		//Виден ли объект
		public var isVisible:Boolean;
		//Требуется ли анимация
		public var needAnimation:Boolean;
 
		public function ObjItem(_objName:String, _urlModel:String, _urlTextures:Array,_textureObjs:Array, _coordX:Number, _coordY:Number,
		_coordZ:Number, _textObjs:Array, _textureCoords:Array, _needEvent:String, _visible:String, _colorObjs:Array,_needAnimation:String) 
		{
			objName = _objName;
			urlModel = _urlModel;
			urlTextures = _urlTextures;
			textureObjs = _textureObjs;
 
			textObjs = _textObjs;
			textureCoords = _textureCoords;
			coord = new Vector3D(_coordX, _coordY, _coordZ);
			if (_needEvent == "false")
			{
				needEvent = false;
			}
			else
			{
				needEvent = true;
			}
			if (_visible == "false")
			{
				isVisible = false;
			}
			else
			{
				isVisible = true;
			}
			if (_needAnimation == "false")
			{
				needAnimation = false;
			}
			else
			{
				needAnimation = true;
			}
			colorObjs = _colorObjs;
		}
	}
И парсинг
Код AS3:
private function ParseMyObj(_obj:XMLList):void
		{
			var texturearr:Array = new Array();
			var textureobjarr:Array = new Array();
			var texturecoord:Array = new Array();
			var objtext:Array = new Array();
			var objcolor:Array = new Array();
			for (var i:Number = 0; i < _obj.length(); i++)
			{
				var object:Object = _obj[i];
					for (var q:Number = 0; q < object.textures.texture.length(); q++)
					{
						var v:Vector3D;
						var t:Object = object.textures.texture[q];
						v = new Vector3D(t.@x, t.@y, t.@z);
						texturecoord.push(v);
						texturearr.push(t.texturesrc);
						textureobjarr.push(t.textureobj);
						if (object.@event == "true")
						{
							objcolor.push(t.color);
						}
							objtext.push(t.text);
					}
				var s:ObjItem = new ObjItem(object.name, object.model, texturearr,textureobjarr, object.@x
			,object.@y, object.@z, objtext, texturecoord, object.@event,object.@visible,objcolor,object.@animation);
			objlist.push(s);
			}
		}
Как мне этот in использовать? Точнее как тогда динамически добавлять аттрибуты в класс ObjItem то есть если in выдаёт true то создать пару полей в ObjItem. не представляю как.

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
как тогда динамически добавлять аттрибуты в класс ObjItem то есть если in выдаёт true то создать пару полей в ObjItem
Объявить
Код AS3:
dynamic class ObjItem
или
Код AS3:
ObjItem extends Proxy
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 03.08.2011, 17:12
savva вне форума Посмотреть профиль Отправить личное сообщение для savva Найти все сообщения от savva
  № 5  
Ответить с цитированием
savva
[+ 06.08.11]

Регистрация: Jul 2011
Сообщений: 79
А можно пример использования подобного?

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
которого из двух?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 03.08.2011, 17:23
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 7  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Я на проксю хочу поглядеть
__________________
Марк Tween

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Например, динамическая таблица стилей умеющая генерировать события своего изменения
Код AS3:
/*
 
  The MIT License
 
  Copyright (c) 2008 - 2011. Dimarik
 
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
  in the Software without restriction, including without limitation the rights
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:
 
  The above copyright notice and this permission notice shall be included in
  all copies or substantial portions of the Software.
 
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.
 
*/
 
package ru.goodcore.text
{
 
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.utils.Proxy;
import flash.utils.flash_proxy;
 
[Event(name="change", type="flash.events.Event")]
 
[Event(name="clear", type="flash.events.Event")]
 
/**
 *  @author				Dimarik
 *  @version			1.1
 *  @langversion		3.0
 *  @playerversion		9.0
 * 
 */
public dynamic class StyleTable extends Proxy implements IEventDispatcher {
 
	//-------------------------------------------------------------------------
	//
	//   Class constants
	//
	//-------------------------------------------------------------------------
 
	//-------------------------------------------------------------------------
	//
	//   Constructor
	//
	//-------------------------------------------------------------------------
 
	/**
	 * Constructor 
	 */
	public function StyleTable() {
		super();
	}
 
	//-------------------------------------------------------------------------
	//
	//   Properties
	//
	//-------------------------------------------------------------------------
 
	//-------------------------------------------------------------------------
	//
	//   Private variables & constants
	//
	//-------------------------------------------------------------------------
 
	/**
	 * @private
	 */
	private const _styleTable:		Object = new Object();
 
	/**
	 * @private
	 */
	private const _dispatcher:		IEventDispatcher = new EventDispatcher();
 
	//-------------------------------------------------------------------------
	//
	//   Interface implementation: IEventDispatcher
	//
	//-------------------------------------------------------------------------
 
	/**
	 * @inheritDoc 
	 */
	public function addEventListener(
										type:				String,
										listener:			Function,
										useCapture:			Boolean = false,
										priority:			int = 0,
										useWeakReference:	Boolean = false
	):void {
		this._dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
	}
 
	/**
	 * @inheritDoc 
	 */
	public function dispatchEvent(event:Event):Boolean {
		return this._dispatcher.dispatchEvent(event);
	}
 
	/**
	 * @inheritDoc 
	 */
	public function hasEventListener(type:String):Boolean {
		return this._dispatcher.hasEventListener(type);
	}
 
	/**
	 * @inheritDoc 
	 */
	public function removeEventListener(
											type:		String, 
											listener:	Function, 
											useCapture:	Boolean = false
	):void {
		this._dispatcher.removeEventListener(type, listener, useCapture);
	}
 
	/**
	 * @inheritDoc 
	 */
	public function willTrigger(type:String):Boolean {
		return this._dispatcher.willTrigger(type);
	}
 
	//-------------------------------------------------------------------------
	//
	//   Overridden methods: Proxy
	//
	//-------------------------------------------------------------------------
 
	flash_proxy override function setProperty(name:*, value:*):void {
		if (this._styleTable[name] === value)
			return;
 
		this._styleTable[name] = value;
 
		if ( this._dispatcher.hasEventListener(Event.CHANGE) )
			this._dispatcher.dispatchEvent( new Event(Event.CHANGE) );
	}
 
	flash_proxy override function getProperty(name:*):* {
		return this._styleTable[name];
	}
 
	//-------------------------------------------------------------------------
	//
	//   Protected methods
	//
	//-------------------------------------------------------------------------
 
	//-------------------------------------------------------------------------
	//
	//   Public methods
	//
	//-------------------------------------------------------------------------
 
	/**
	 * Очищает таблицу стилей
	 */
	public function clear():void {
		for (var i:String in this._styleTable)
			delete this._styleTable[i];
 
		this._dispatcher.dispatchEvent( new Event(Event.CLEAR) );
	}
 
	//-------------------------------------------------------------------------
	//
	//   Private methods
	//
	//-------------------------------------------------------------------------
 
	//-------------------------------------------------------------------------
	//
	//   Event handlers
	//
	//-------------------------------------------------------------------------
 
 
}
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 03.08.2011, 23:44
savva вне форума Посмотреть профиль Отправить личное сообщение для savva Найти все сообщения от savva
  № 9  
Ответить с цитированием
savva
[+ 06.08.11]

Регистрация: Jul 2011
Сообщений: 79
А можно пример более подходящей для моей ситуации?

А то я никогда не работал с динамическими классами,а в этом примере не особо понятно что мне нужно сделать

Старый 03.08.2011, 23:59
Sintesis вне форума Посмотреть профиль Отправить личное сообщение для Sintesis Найти все сообщения от Sintesis
  № 10  
Ответить с цитированием
Sintesis
 
Аватар для Sintesis

Регистрация: Jul 2008
Сообщений: 912
savva, что вообще собираешься делать? Куда собираешься парсить из формата Альтернатива3D?

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

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

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


 


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


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