Просмотр полной версии : Собственный класс загрузки изображений из библиотеки
Доброго времени суток.
Решил создать собственный класс загрузки изображений прямо из библиотеки в классе.
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;
Хотелось бы услышать ваши мнения по поводу такой реализации, может что-то стоит усовершенствовать особенно в сторону удаления объекта?
Стоит наследоваться от класса Bitmap. И это, чё-то он не много пользы приносит, может без него обойтись?
Стоит наследоваться от класса 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));
А я одной строкой и переменной обхожусь:
var pic1:Bitmap = new Bitmap(new img1(0, 0));
Неверный подход так как, когда удаляешь это изображение
pic1 = null;
и потом вызываешь GC
try {
(new LocalConnection).connect('gc');
(new LocalConnection).connect('gc');
} catch(e:*) {}
то он не освобождает память от изображения, это уже проверено.
ZedAlert когда будете разрабатывать большие приложения, столкнетесь с проблемой постоянного роста памяти потребляемой флешкой.
Неверный подход так как, когда удаляешь это изображение
pic1 = null;
pic1.bitmapData.dispose();
pic1 = null;
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();
}
}
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
Эта строчка вызывает конструктор супер-класса с заданными параметрами.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.