|
|
|||||
копирование объектов
просмотрел на форуме как копировать объект
попытался воспроизвести 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); то я вижу оригинал а вот копии не видно... |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Это не копирование. Это создание такого же класса. ho = new Sprite(); - значит, что ho - это спрайт. Потому dup - это тоже спрайт. Просто спрайт, по умолчанию пустой. Если бы ho - был наследник спрайта, в котором при создании в конструкторе бы добавлялся TextField, то вы бы при создании тоже получили бы наследника спрайта с текстфилдом.
Копирование делается так: создается класс такой же, как и копируемый (это сделано) и над ним совершаются такие же действия как и над копируемым (т.е. в вашем случае создается текстовое поле и добавляется).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
|
Main.as
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); } } } 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. Причина: опаздал |
|
|||||
Большое спасибо за ответы
но я виноват я не уточнил для какой именно задачи мне надо создать копию моя задача загрузить одну картинку и затем размножить ее. Загрузить можно лишь 1 раз вот примерно так 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 минуту короче я додумался сам =) вы меня подтолкнули к верному пути 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. |
|
|||||
Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
|
http://help.adobe.com/ru_RU/FlashPla...ml#clone%28%29
Добавлено через 3 минуты Вообще для вашего случая, надо создать ResourceManager который все загружает и хранит в себе, остальные классы приложения его просто опрашивают. Тигра создавал в этом топике тему, можно ее найти, там есть хорошие идеи.
__________________
Я просто добрый шутник. |
Часовой пояс GMT +4, время: 17:55. |
|
« Предыдущая тема | Следующая тема » |
|
|