Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Получить экземпляр с экземпляра. (http://www.flasher.ru/forum/showthread.php?t=201644)

AlexCooper 19.06.2013 14:10

Получить экземпляр с экземпляра.
 
Здравствуйте.
Есть класс который размещает объекты по установленной сетке.
Код AS3:

package me.view {
 
        import flash.display.DisplayObject;
        import flash.display.DisplayObjectContainer;
 
        import me.advicer.gui.GUI;
 
        public class PhotoBox {
 
                public function PhotoBox() {
 
                }
 
                public var item:GUI;
 
                public var view:DisplayObjectContainer;
 
                public function model(data:Object):void {
 
                }
 
        }
 
}

В качестве самих объектов приходит экземпляр класса
Код AS3:

package me.advicer.view {
 
        import me.advicer.gui.GUI;
 
        public class AlbumItem extends GUI {
 
                public function AlbumItem() {
                        album_name.mouseEnabled = false;
                }
 
                override public function model(data:Object):void {
                }
        }
 
}

все в сборе выглядит так
Код AS3:

var photoBox:PhotoBox =new PhotoBox();
photoBox.item = new AlbumItem();
photoBox.view = _view;
photoBox.model(new dev.UserAlbum().get);

то-есть мне нужно AlbumItem внутри PhotoBox клонировать.
можно так?
Код AS3:

function clone( source:Object ):* 
{
    var myBA:ByteArray = new ByteArray();
    myBA.writeObject( source );
    myBA.position = 0;
    return( myBA.readObject() );
}

или же лучше в самом классе AlbumItem создать метод создания экземпляра. Вопрос крайне прост не судите строго) Наглядное пособие будет максимально полезным.

maincode 19.06.2013 14:31

Делайте метод clone внутри класса AlbumItem

AlexCooper 19.06.2013 14:39

Цитата:

Сообщение от maincode (Сообщение 1138569)
Делайте метод clone внутри класса AlbumItem

можно беглый пример?

Добавлено через 2 минуты
так?
Код AS3:

public function clone():AlbumItem {
        return new AlbumItem();
}

Добавлено через 7 минут
получается так
Код AS3:

package me.advicer.gui {
 
        import flash.display.Sprite;
        import flash.display.DisplayObject;
 
        public class GUI extends Sprite{
 
                public var _view:Sprite = new Sprite();
 
                public function GUI() {
                        // constructor code
                }
 
                public function model($data:Object):void {};
 
                public function setViewer(displayObject:Sprite):void {};
 
                public function clone( source:GUI ):GUI
                {
                        return new GUI();
                }
        }
 
}

Код AS3:

package me.advicer.view {
 
        import me.advicer.gui.GUI;
 
        public class AlbumItem extends GUI {
 
                public function AlbumItem() {
                        album_name.mouseEnabled = false;
                }
 
                override public function clone():AlbumItem {
                        return new AlbumItem();
                }
 
 
        }
 
}

на что компилятор отвечает
Цитата:

D:\Program Files\workset\Advicers\me\advicer\view\AlbumItem.as, строка 11 1023: Несовместимое переопределение.
подправьте пожалуйста.

AlexLucas 19.06.2013 14:50

Вы clone неправильно переписали, в GUI он возвращает и принимает объекты другого типа.

AlexCooper 19.06.2013 14:58

понял. Свел к

Код AS3:

package me.advicer.gui {
 
        import flash.display.Sprite;
        import flash.display.DisplayObject;
 
        public class GUI extends Sprite{
 
                public var _view:Sprite = new Sprite();
 
                public function GUI() {
                        // constructor code
                }
 
                public function model($data:Object):void {};
 
                public function setViewer(displayObject:Sprite):void {};
 
                public function clone():GUI
                {
                        return new GUI();
                }
        }
 
}

Добавлено через 6 минут
Но почему то не отображает

Код AS3:

package me.advicer.view {
 
        import me.advicer.gui.GUI;
 
        public class AlbumItem extends GUI {
 
                public function AlbumItem() {
                        album_name.mouseEnabled = false;
                }
 
                override public function clone():GUI {
                        return new AlbumItem();
                }
        }
}

Код AS3:

package me.view {
 
        import flash.display.DisplayObject;
        import flash.display.DisplayObjectContainer;
 
        import me.advicer.gui.GUI;
 
        public class PhotoBox extends GUI{
 
                public function PhotoBox() {
 
                }
 
                public var item:GUI;
 
                public var view:DisplayObjectContainer;
 
                override public function model(data:Object):void {
 
                        addChild(item); // нет изображения
                        addChild(item.clone()); // нет изображения
 
                        item.x = 100;
                }
 
        }
 
}

Код AS3:

private function mouseHandler(event:MouseEvent):void {
 
                        switch (event.currentTarget.name) {
                                case 'closeBtn':
                                        WindowsManager.close(this);
                                break;
 
                                case 'localBtn':
                                        ResourceManager.open(ResourceEnum.IMAGE, new ObjectPosition(ObjectPosition.ALIGN_CENTER, 572, 406, conteiner, true ).view) ;
                                break;
 
                                case 'albumBtn':
 
                                        var photoBox:PhotoBox = new PhotoBox();
                                                photoBox.item = new AlbumItem();
                                                photoBox.view = this;
                                                photoBox.model(new UserAlbum().get);
 
 
                                        addChild(new AlbumItem()) // <- отображает
 
                                break;
 
                                case 'readyBtn':
 
                                        _view.addChild(new Bitmap(ResourceManager.getBitmapdata(conteiner,fill_circle.x,fill_circle.y,fill_circle.width,fill_circle.height)));
 
 
                                break;
                        }
                }

Добавлено через 13 минут
разобрался.
Код AS3:

package me.view {
 
        import flash.display.DisplayObject;
        import flash.display.DisplayObjectContainer;
 
        import me.advicer.gui.GUI;
 
        public class PhotoBox extends GUI{
 
                public function PhotoBox() {
 
                }
 
                public var item:GUI;
 
                public var view:DisplayObjectContainer;
 
                override public function model(data:Object):void {
 
                        view.addChild(item); // addChild(item);
                        view.addChild(item.clone()); //addChild(item.clone());
 
                        item.x = 100;
                }
 
        }
 
}



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

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