PDA

Просмотр полной версии : Собственный класс загрузки изображений из библиотеки


vvvvvvf
28.06.2009, 16:26
Доброго времени суток.
Решил создать собственный класс загрузки изображений прямо из библиотеки в классе.


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;
}
}
}


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


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


удаляю так


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


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

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

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

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

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

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


вместо одного

bg = new img();


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

ZedAlert
28.06.2009, 20:47
А я одной строкой и переменной обхожусь:
var pic1:Bitmap = new Bitmap(new img1(0, 0));

vvvvvvf
28.06.2009, 21:31
А я одной строкой и переменной обхожусь:
var pic1:Bitmap = new Bitmap(new img1(0, 0));

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

pic1 = null;


и потом вызываешь GC

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


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

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

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

pic1 = null;



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

silin
28.06.2009, 21:52
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
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
Эта строчка вызывает конструктор супер-класса с заданными параметрами.