Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.06.2008, 18:15
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 1  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
Tools Как правильней организовать доступ к экземплярам класса?

Привет!
Подскажите или поправьте меня, если я не прав.
Прилагаю код (упрощенный) для класса и клипа. Ставилась задача: динамически создавать экземпляры класса в котором создавался клип, с последующей загрузкой графики, рисунков, клипов и т.д. с возможностью их редактировать и управлять ими. Для этого мне нужно как-то обращаться к ним, чтоб получать свойства и менять их.
Как правильней организовать доступ к экземплярам класса? Я реализовал это через массив, но мне кажется это неуклюже. Возможно, ли по-другому это сделать?
Я ввел в класс свойство 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;
	}
}
клип (btnPIC_btn - кнопка содать, b1_btn - кнопка вывести свойство)
Код:
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);
};
Вложения
Тип файла: rar TEST.rar (11.2 Кб, 55 просмотров)

Старый 06.06.2008, 20:54
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 2  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Почему неуклюже, очень даже "уклюже"!!
__________________
Случайность, господа, это знаете ли непознанная необходимость.

Старый 07.06.2008, 10:34
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 3  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Код:
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);
};
Вот похожая тема: http://www.flasher.ru/forum/showthread.php?t=110799


Последний раз редактировалось Волгоградец; 07.06.2008 в 10:39.
Старый 07.06.2008, 12:32
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
по мне так удобнее хранить не экземпляры статическом массиве класса, чем в глобальном массиве..
Код:
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 );
	}
};

Старый 07.06.2008, 14:43
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я бы делал менеджер и функцию ему типа getInstanceNum([n=instance position in array]):ImageViewer чтобы потом не нужно было перекастовать. Объекты которые будут хранится в массиве будут нетипизированы если обращаться к ним просто по номеру, а если прийдется часто обращаться - ИМХО не удобно писать каждый раз ImageViewer(_picArray[i]).w... конечно, это добавляет 1 вызов вроде как лишнего метода, но зато автокомплит будет работать и кодить будет приятнее %)
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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