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

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

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

блогер
Регистрация: Mar 2009
Сообщений: 11
Записей в блоге: 4
По умолчанию копирование объектов

просмотрел на форуме как копировать объект
попытался воспроизвести

Код AS3:
package 
{
	import flash.display.*;
	import flash.net.URLRequest;
	import flash.events.*;
	import flash.text.*;
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
 
			// создал текстовое поле
			var progressOut:TextField = new TextField();
			progressOut.autoSize = TextFieldAutoSize.LEFT;
			progressOut.border = true;
			progressOut.background = true;
			progressOut.selectable = false;
			progressOut.text = "Loa45645654";
 
			// сунул текстовое поле  в  спрайт
			var ho:Sprite = new Sprite();
			ho.addChild(progressOut);
 
 
 
			// попытался скопировать спрайт 
			var ClassR:Class = (ho as Object).constructor as Class;
			var dup:Sprite = new ClassR() as Sprite;
 
			// вывожу копию спрайта на экран и  получается фейл – экран пустой
			addChild(dup);
 
		}
	}
}
что я сделал не так?

спрайт должен быть виден
если поменять addChild(dup); на addChild(ho);
то я вижу оригинал а вот копии не видно...

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Это не копирование. Это создание такого же класса. ho = new Sprite(); - значит, что ho - это спрайт. Потому dup - это тоже спрайт. Просто спрайт, по умолчанию пустой. Если бы ho - был наследник спрайта, в котором при создании в конструкторе бы добавлялся TextField, то вы бы при создании тоже получили бы наследника спрайта с текстфилдом.
Копирование делается так: создается класс такой же, как и копируемый (это сделано) и над ним совершаются такие же действия как и над копируемым (т.е. в вашем случае создается текстовое поле и добавляется).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
Main.as
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author Sscarbo
	 */
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			var sprite0:CustomSprite = new CustomSprite();
			var sprite1:CustomSprite = sprite0.copy();
			this.addChild(sprite1);
		}
 
	}
 
}
CustomSprite.as
Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
 
	/**
	 * ...
	 * @author Sscarbo
	 */
	public class CustomSprite extends Sprite 
	{
		protected var progressOut:TextField;
 
		public function CustomSprite() 
		{
			super();
			this._createChildren();
		}
 
		public function copy():CustomSprite {
			return new CustomSprite();
		}
 
		protected function _createChildren():void {
			this.progressOut = new TextField();
			this.progressOut.autoSize = TextFieldAutoSize.LEFT;
			this.progressOut.border = true;
			this.progressOut.background = true;
			this.progressOut.selectable = false;
			this.progressOut.text = "Loa45645654";
			this.addChild(this.progressOut);
		}
	}
 
}
блин, опаздал.
__________________
Я просто добрый шутник.


Последний раз редактировалось scarbo; 23.10.2011 в 12:49. Причина: опаздал
Старый 23.10.2011, 13:10
skyman000 вне форума Посмотреть профиль Отправить личное сообщение для skyman000 Найти все сообщения от skyman000
  № 4  
Ответить с цитированием
skyman000
 
Аватар для skyman000

блогер
Регистрация: Mar 2009
Сообщений: 11
Записей в блоге: 4
Большое спасибо за ответы
но я виноват я не уточнил для какой именно задачи мне надо создать копию

моя задача загрузить одну картинку и затем размножить ее.
Загрузить можно лишь 1 раз

вот примерно так
Код AS3:
package 
{
	import flash.display.*;
	import flash.net.URLRequest;
	import flash.events.*;
	import flash.text.*;
	import flash.utils.ByteArray;
 
	public class Main extends Sprite 
	{
		public function Main():void 
		{			
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.INIT, init);
			var urlR:URLRequest = new URLRequest("33.jpg");
			loader.load(urlR);	
		}
 
		function init(e:Event):void
		{
			var b:Bitmap = clone(e.target.content) as Bitmap;
			addChild(b);
		}
 
		function clone(source:Object):* {
			var copier:ByteArray = new ByteArray();
			copier.writeObject(source);
			copier.position = 0;
			return(copier.readObject());
		}
 
	}
}
но этот код не работает =(

как создать точно такую же Bitmap из имеющейся?
при условии что загрузить можно лишь раз

Добавлено через 31 минуту
короче я додумался сам =)

вы меня подтолкнули к верному пути

Код AS3:
		function init(e:Event):void
		{
 
			var a1:Bitmap = this.clone(e.target.content);
			var a2:Bitmap = this.clone(e.target.content);
 
			addChild(a1);
			addChild(a2);
 
			a1.x += 100;
		}
 
		function clone(sz:Bitmap):Bitmap {
			var c:BitmapData = sz.bitmapData.clone();
			return new Bitmap(c);
		}
вот все заработало.

я просто думал есть какой то другой способ копирования)


Последний раз редактировалось skyman000; 23.10.2011 в 13:42.
Старый 23.10.2011, 13:43
scarbo вне форума Посмотреть профиль Отправить личное сообщение для scarbo Найти все сообщения от scarbo
  № 5  
Ответить с цитированием
scarbo
 
Аватар для scarbo

Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
http://help.adobe.com/ru_RU/FlashPla...ml#clone%28%29

Добавлено через 3 минуты
Вообще для вашего случая, надо создать ResourceManager который все загружает и хранит в себе, остальные классы приложения его просто опрашивают. Тигра создавал в этом топике тему, можно ее найти, там есть хорошие идеи.
__________________
Я просто добрый шутник.

Старый 23.10.2011, 13:49
skyman000 вне форума Посмотреть профиль Отправить личное сообщение для skyman000 Найти все сообщения от skyman000
  № 6  
Ответить с цитированием
skyman000
 
Аватар для skyman000

блогер
Регистрация: Mar 2009
Сообщений: 11
Записей в блоге: 4
я его как раз и пишу =)
и вот для полной картины мне не хватало как раз понять как копировать объекты

но сейчас почти все готово

а тему я поищу может что полезного найду

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

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

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


 


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


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