Форум 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=126830)

vvvvvvf 28.06.2009 16:26

Собственный класс загрузки изображений из библиотеки
 
Доброго времени суток.
Решил создать собственный класс загрузки изображений прямо из библиотеки в классе.

Код AS3:

package main{
        import flash.display.*;
 
        public class img extends Sprite {
                var bg:* = null;
                var myBitmap:Bitmap = null;
 
                public function img(obj:*, x:Number = 0, y:Number = 0):void {
                        bg = new obj(x,y);
                        myBitmap = new Bitmap(bg);
                        addChild(myBitmap);
                }
                public function destroy():void {
                        removeChild(myBitmap);
                        myBitmap = null;
                        bg = null;
                }
        }
}

А запускаю я его вот так

Код AS3:

                        var bg:img = new img(bgMain);
                        addChild(bg);

удаляю так

Код AS3:

                        removeChild(bg);
                        bg.destroy();
                        bg = null;

Хотелось бы услышать ваши мнения по поводу такой реализации, может что-то стоит усовершенствовать особенно в сторону удаления объекта?

MrPoma 28.06.2009 16:34

Стоит наследоваться от класса Bitmap. И это, чё-то он не много пользы приносит, может без него обойтись?

vvvvvvf 28.06.2009 16:48

Цитата:

Сообщение от MrPoma (Сообщение 831487)
Стоит наследоваться от класса Bitmap. И это, чё-то он не много пользы приносит, может без него обойтись?

я прикинул, что если мне надо добавить 10 картинок из библиотеки, то я должен объявить две переменные вместо одной для каждой картинки

создать два различных класса
Код AS3:

bg = new obj(x,y);
myBitmap = new Bitmap(bg);

вместо одного
Код AS3:

bg = new img();

в итоге получается без класса код займет 50 строк, а с классом только 30 строк, это не говоря уже про удаление.

ZedAlert 28.06.2009 20:47

А я одной строкой и переменной обхожусь:
Код AS3:

var pic1:Bitmap = new Bitmap(new img1(0, 0));


vvvvvvf 28.06.2009 21:31

Цитата:

Сообщение от ZedAlert (Сообщение 831538)
А я одной строкой и переменной обхожусь:
Код AS3:

var pic1:Bitmap = new Bitmap(new img1(0, 0));


Неверный подход так как, когда удаляешь это изображение
Код AS3:

pic1 = null;

и потом вызываешь GC
Код AS3:

try {
        (new LocalConnection).connect('gc');
        (new LocalConnection).connect('gc');
} catch(e:*) {}

то он не освобождает память от изображения, это уже проверено.

ZedAlert когда будете разрабатывать большие приложения, столкнетесь с проблемой постоянного роста памяти потребляемой флешкой.

MrPoma 28.06.2009 21:47

Цитата:

Сообщение от vvvvvvf (Сообщение 831549)
Неверный подход так как, когда удаляешь это изображение
Код AS3:

pic1 = null;


Код AS3:

pic1.bitmapData.dispose();
pic1 = null;


silin 28.06.2009 21:52

Код AS3:

public class LibBitmap extends Bitmap
{
 
        public function LibBitmap(exportLinkage:Class, pixelSnapping:String = "auto", smoothing:Boolean = false)
        {
                super(null, pixelSnapping, smoothing);
                try
                {
                        bitmapData = new exportLinkage(0, 0);
                }catch (e:Error){}
 
        }
        public function destroy():void
        {
                bitmapData.dispose();
        }
}


vvvvvvf 28.06.2009 23:13

Цитата:

Сообщение от silin (Сообщение 831556)
Код AS3:

public class LibBitmap extends Bitmap
{
 
        public function LibBitmap(exportLinkage:Class, pixelSnapping:String = "auto", smoothing:Boolean = false)
        {
                super(null, pixelSnapping, smoothing);
                try
                {
                        bitmapData = new exportLinkage(0, 0);
                }catch (e:Error){}
 
        }
        public function destroy():void
        {
                bitmapData.dispose();
        }
}


опишите эту строчку что она делает и вообще зачем она нужна?
super(null, pixelSnapping, smoothing);

и еще я считаю что в destroy переменной bitmapData нужно также присваивать null

etc 28.06.2009 23:19

Эта строчка вызывает конструктор супер-класса с заданными параметрами.


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

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