![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Привет!
Подскажите или поправьте меня, если я не прав. Прилагаю код (упрощенный) для класса и клипа. Ставилась задача: динамически создавать экземпляры класса в котором создавался клип, с последующей загрузкой графики, рисунков, клипов и т.д. с возможностью их редактировать и управлять ими. Для этого мне нужно как-то обращаться к ним, чтоб получать свойства и менять их. Как правильней организовать доступ к экземплярам класса? Я реализовал это через массив, но мне кажется это неуклюже. Возможно, ли по-другому это сделать? Я ввел в класс свойство id. Может как-то посредство его? Приложил и исходник на всякий случай. Спасибо. класс class ImageViewer {
// номер очередного контейнера
public static var _numberpic:Number = 1;
private var target_mc:MovieClip;
private var container_mc:MovieClip;
private var containerDepth:Number;
// id объекта
private var _id:Number;
// отступ по X и Y
private var _dx:Number;
private var _dy:Number;
// ширина и высота
private var _w:Number;
private var _h:Number;
public function ImageViewer(target:MovieClip, x:Number, y:Number, w:Number, h:Number) {
_w = w;
_h = h;
_dx = x;
_dy = y;
target_mc = target;
_id = containerDepth=_numberpic;
buildViewer();
}
// Создание клипа
private function buildViewer():Void {
var w = this._w;
var h = this._h;
container_mc = target_mc.createEmptyMovieClip("container"+containerDepth+"_mc", containerDepth);
_numberpic++;
container_mc._x = _dx;
container_mc._y = _dy;
with (container_mc) {
lineStyle(4, 0, 100);
moveTo(0, 0);
lineTo(w, 0);
lineTo(w, h);
lineTo(0, h);
lineTo(0, 0);
}
}
public function get w():Number {
return _w;
}
public function set w(par:Number):Void {
_w = par;
}
}
import ImageViewer;
_global._picArray = [];
btnPIC_btn.onPress = function() {
var i = ImageViewer._numberpic;
switch (i) {
case 1 :
var picNext:ImageViewer = new ImageViewer(main_mc, 10, 10, 500, 400);
break;
case 2 :
var picNext:ImageViewer = new ImageViewer(main_mc, 110, 210, 140, 140);
break;
case 3 :
var picNext:ImageViewer = new ImageViewer(main_mc, 30, 50, 400, 50);
break;
}
_picArray.push(picNext);
};
// кнопка тестирования
b1_btn.onPress = function() {
trace(_picArray[0].w);
trace(_picArray[1].w);
trace(_picArray[2].w);
};
|
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Почему неуклюже, очень даже "уклюже"
!!
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
import ImageViewer;
_global._picArray = [];
btnPIC_btn.onPress = function() {
var i = ImageViewer._numberpic;
switch (i) {
case 1 :
_picArray.push (new ImageViewer(main_mc, 10, 10, 500, 400));
break;
case 2 :
_picArray.push (new ImageViewer(main_mc, 110, 210, 140, 140));
break;
case 3 :
_picArray.push (new ImageViewer(main_mc, 30, 50, 400, 50));
break;
}
};
// кнопка тестирования
b1_btn.onPress = function() {
trace(_picArray[0].w);
trace(_picArray[1].w);
trace(_picArray[2].w);
};
Последний раз редактировалось Волгоградец; 07.06.2008 в 10:39. |
|
|||||
|
по мне так удобнее хранить не экземпляры статическом массиве класса, чем в глобальном массиве..
class ImageViewer {
public static var list:Array = [];
private var target_mc:MovieClip;
private var container_mc:MovieClip;
private var containerDepth:Number;
// id объекта
private var _id:Number;
// отступ по X и Y
private var _dx:Number;
private var _dy:Number;
// ширина и высота
private var _w:Number;
private var _h:Number;
public function ImageViewer(target:MovieClip, x:Number, y:Number, w:Number, h:Number) {
_w = w;
_h = h;
_dx = x;
_dy = y;
target_mc = target;
_id = containerDepth = list.length;
list.push(this);
buildViewer();
}
// Создание клипа
private function buildViewer():Void {
var w = this._w;
var h = this._h;
container_mc = target_mc.createEmptyMovieClip("container" + containerDepth + "_mc", containerDepth);
container_mc._x = _dx;
container_mc._y = _dy;
with (container_mc) {
lineStyle(4, 0, 100);
moveTo(0, 0);
lineTo(w, 0);
lineTo(w, h);
lineTo(0, h);
lineTo(0, 0);
}
}
public function get w():Number {
return _w;
}
public function set w(par:Number):Void {
_w = par;
}
public function toString():String
{
return "[object ImageViewer id:" + _id+"]";
}
}
btnPIC_btn.onPress = function() {
var i = ImageViewer.list.length;
switch (i) {
case 0 :
var picNext:ImageViewer = new ImageViewer(main_mc, 10, 10, 500, 400);
break;
case 1 :
var picNext:ImageViewer = new ImageViewer(main_mc, 110, 210, 140, 140);
break;
case 2 :
var picNext:ImageViewer = new ImageViewer(main_mc, 30, 50, 400, 50);
break;
}
//_picArray.push(picNext);
};
// кнопка тестирования
b1_btn.onPress = function() {
for(var i=0;i<ImageViewer.list.length;i++){
var inst:ImageViewer=ImageViewer.list[i];
trace( "\ninst: " + inst+ "; width : " + inst.w );
}
};
|
|
|||||
|
Modus ponens
|
Я бы делал менеджер и функцию ему типа getInstanceNum([n=instance position in array]):ImageViewer чтобы потом не нужно было перекастовать. Объекты которые будут хранится в массиве будут нетипизированы если обращаться к ним просто по номеру, а если прийдется часто обращаться - ИМХО не удобно писать каждый раз ImageViewer(_picArray[i]).w... конечно, это добавляет 1 вызов вроде как лишнего метода, но зато автокомплит будет работать и кодить будет приятнее %)
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:57. |
|
|
« Предыдущая тема | Следующая тема » |
|
|