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

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

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Arrow Скопировать объект без ссылки

У меня такая проблема:
У меня есть объект который я создаю в классе Main, затем передаю его как параметр в класс Settings. В классе Settings меняю содержимое принятого класса, и диспатчу событие при нажатии на кнопке ОК в классе Settings о том, что значения изменились. По диспатчу в классе Main я перезаписываю изначальный объект переданным, но проблема в том, что он перезаписывается ещё до диспатча, в связи с тем, как я понимаю, что переданный объект это всего лишь ссылка на начальный, соответственно меняя второй мы автоматом меняем первый! Как сделать так чтобы при передаче я создавал отдельный объект никак не связанный с изначальным т.е. надо создать реально новый объект на основании старого! Надеюсь понятно объяснил!

Старый 14.08.2011, 01:09
3p.station вне форума Посмотреть профиль Отправить личное сообщение для 3p.station Найти все сообщения от 3p.station
  № 2  
Ответить с цитированием
3p.station
 
Аватар для 3p.station

блогер
Регистрация: Oct 2009
Адрес: кочевник. Киев
Сообщений: 453
Записей в блоге: 5
Да, это всего лишь ссылка на ваш объект созданный в Main. "Перезаписыватся" тока стринги и числа, даже xml и тот Object
Есть несолкько вариантов. Первый сделать метод clone у вашого объекта который будет возвращать созданный такойже объект и которому будет передано состояние клонируемого. И второй который я знаю это паттерн прототип
__________________
мира и гармонии

Старый 14.08.2011, 01:57
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 3  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Цитата:
И второй который я знаю это паттерн прототип
не ругайтесь непонятными словами!
Можно поподробнее про эти методы?)
Как например может выглядеть метод clone?

Старый 14.08.2011, 02:07
3p.station вне форума Посмотреть профиль Отправить личное сообщение для 3p.station Найти все сообщения от 3p.station
  № 4  
Ответить с цитированием
3p.station
 
Аватар для 3p.station

блогер
Регистрация: Oct 2009
Адрес: кочевник. Киев
Сообщений: 453
Записей в блоге: 5
самое простое
Код AS3:
package guiComponents.graphics
{
 
	public class PaneStyle
	{
		public var topColor:uint = 0xC0C0C0;
		public var bottomColor:uint = 0xCCCCCC;
		public var borderWidth:uint = 0;
		public var borderColor:uint = 0xBBBBBB;
		public var leftTopCorner:uint = 0;
		public var rightTopCorner:uint = 0;
		public var leftBottomCorner:uint = 0;
		public var rightBotomCorner:uint = 0;
		public var gradientAngle:uint = 90;
		public var hideBottomBorder:Boolean = false;
 
		public function clone():PaneStyle
		{
			var panestyle:PaneStyle = new PaneStyle();
			panestyle.topColor = topColor;
			panestyle.bottomColor = bottomColor;
			panestyle.borderWidth = borderWidth;
			panestyle.borderColor = borderColor;
			panestyle.leftTopCorner = leftTopCorner;
			panestyle.rightTopCorner = rightTopCorner;
			panestyle.leftBottomCorner = leftBottomCorner;
			panestyle.rightBotomCorner = rightBotomCorner;
			panestyle.gradientAngle = gradientAngle;
			panestyle.hideBottomBorder = hideBottomBorder;
 
			return panestyle;
		}
 
	}//end class
}//end package
Добавлено через 2 минуты
у Rectangle есть clone() например
http://etcs.ru/as3_tips_and_tricks/d...ith_bytearray/
__________________
мира и гармонии


Последний раз редактировалось 3p.station; 14.08.2011 в 02:12.
Старый 14.08.2011, 02:12
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 5  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
ну это понятно, а чтото поизящнее? Интуиция подсказывает что тут должен быть какой то хитрый for in

Добавлено через 5 минут
Не силён я в ByteArray)) Пока что не могу въехать каким это магическим образом он может скопировать весь объект))
Код AS3:
import flash.utils.ByteArray;
 
function clone(source:Object):* {
    var copier:ByteArray = new ByteArray();
    copier.writeObject(source);
    copier.position = 0;
    return(copier.readObject());
}


Последний раз редактировалось iNils; 14.08.2011 в 12:36.
Старый 14.08.2011, 02:20
3p.station вне форума Посмотреть профиль Отправить личное сообщение для 3p.station Найти все сообщения от 3p.station
  № 6  
Ответить с цитированием
3p.station
 
Аватар для 3p.station

блогер
Регистрация: Oct 2009
Адрес: кочевник. Киев
Сообщений: 453
Записей в блоге: 5
ну writeObject , не ?

Добавлено через 2 минуты
Код AS3:
if (referenceTextField)
			{
				var description:XML = describeType(referenceTextField);
 
				for each (var item:XML in description.accessor)
				{
					// clone passed textfield properties that are not readonly
					if (item.@access != "readonly") this[item.@name] = referenceTextField[item.@name];
				}
			}
так ?
__________________
мира и гармонии

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
У меня есть объект который я создаю в классе Main,
Что мешает создать его еще раз в классе Settings и вернуть в Main?

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Цитата:
Что мешает создать его еще раз в классе Settings и вернуть в Main?
да, в принципе тоже хороший вариант)

Цитата:
var description:XML = describeType(referenceTextField);

for each (var item:XML in description.accessor)
{
// clone passed textfield properties that are not readonly
if (item.@access != "readonly") this[item.@name] = referenceTextField[item.@name];
}
Это пример для копирования только свойств TextField или вообще можно использовать с любыми объектами?

Старый 15.08.2011, 20:04
3p.station вне форума Посмотреть профиль Отправить личное сообщение для 3p.station Найти все сообщения от 3p.station
  № 9  
Ответить с цитированием
3p.station
 
Аватар для 3p.station

блогер
Регистрация: Oct 2009
Адрес: кочевник. Киев
Сообщений: 453
Записей в блоге: 5
ну вроде для всех
__________________
мира и гармонии

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

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

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


 


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


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