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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.09.2006, 13:20
Ulya вне форума Посмотреть профиль Отправить личное сообщение для Ulya Найти все сообщения от Ulya
  № 1  
Ответить с цитированием
Ulya

Регистрация: Aug 2006
Адрес: msk
Сообщений: 100
Отправить сообщение для Ulya с помощью ICQ
По умолчанию и снова массив мувиков: нужен совет

Уважаемые гуру флэша.
Я тут уже всю голову сломала, что не так. Подскажите.

Есть массив объектов с набором полей. Из каждого элемента массива создается мувик и присоединяется к массиву мувиков. Массив объектов изменяется во времени. То есть, если массив содержит 5 объектов, мы их отрисовываем, запихиваем мувики в массив мувиков M, массив с исходными объектами обнуляем. Зтем через несколько секунд спрашиваем: а не стал ли массив объектов не 0. Если там что-то есть, создаем опять из него мувики, запихиваем в массив М.
Проблема в том, что после зоздания пустого мувика с целью отрисовки, массив мувиков M ведет себя странно, а именно удаляет по элементу массива. ПОЧЕМУ???
Код:
function draw_sms() {
	trace("_root.smsUncheckedArray: "+_root.smsUncheckedArray);
	for (g=0; g<_root.smsUncheckedArray.length; g++) {
		i = _root.M.length;
		trace("i="+i);
		trace("g="+g);
		trace("до "+_root.M);
		_root.createEmptyMovieClip("sms" +i, i);
		trace("после создания смс "+_root.M);		_root.M[_root.M.length] = (eval("sms"+i));
		trace("после подсоединения:"+_root.M);
		_root.M[_root.M.length-1]._x = 2;
		with (eval("sms"+i)) {
			eval("sms"+i).id = _root.smsUncheckedArray[g].id;
			T1 = "Дата: "+_root.smsUncheckedArray[g].date+"\nНик: "+_root.smsUncheckedArray[g].nick+"\nНомер: "+_root.smsUncheckedArray[g].subno;
			T2 = _root.smsUncheckedArray[g].text;
			T = T1+T2;
			var metrics1:Object = my_fmt.getTextExtent(T1, sms_w);
			var metrics2:Object = my_fmt.getTextExtent(T2, sms_w);
			createTextField("my_txt", i+700, 0, 0, sms_w, metrics1.textFieldHeight+1);
			//////////trace("высота шапки "+metrics1.textFieldHeight+1);
			createTextField("my_txt1", i+900, 0, metrics1.textFieldHeight+1, sms_w, metrics2.textFieldHeight+1);
			//////////trace("высота текста "+metrics2.textFieldHeight+1);
			my_txt.visible = true;
			my_txt.multiline = true;
			my_txt.wordWrap = true;
			my_txt.type = "dynamic";
			my_txt.border = true;
			my_txt.text = html;
			my_txt.htmlText = T1;
			my_txt1.visible = true;
			my_txt1.multiline = true;
			my_txt1.wordWrap = true;
			my_txt1.type = "dynamic";
			my_txt1.border = true;
			my_txt1.background = true;
			my_txt1.backgroundColor = 0xF9F8F2;
			my_txt1.text = html;
			my_txt1.htmlText = T2;
			// 
			if (i eq 0) {
				_root.M[i]._y = 25;
			} else {
				trace("i="+i);
				_root.M[i]._y = _root.M[i-1]._y+_root.M[i-1]._height+2;
			}
			eval("my_txt").setTextFormat(my_fmt);
			eval("my_txt1").setTextFormat(my_fmt);
			attachMovie("btM", "btM", 100+this.getNextHighestDepth());
			attachMovie("btY", "btY", 200+this.getNextHighestDepth());
			attachMovie("btN", "btN", this.getNextHighestDepth());
			attachMovie("btOK", "btOK", 300+this.getNextHighestDepth());
			attachMovie("btUndo", "btUndo", 755+this.getNextHighestDepth());
			btOK.enabled = false;
			btOK._visible = false;
			btUndo.enabled = false;
			btUndo._visible = false;
			btOK._x = _width-45;
			btOK._y = 4.5;
			btOK._height = 20;
			btOK._width = 20;
			btUndo._x = _width-23;
			btUndo._y = 4.5;
			btUndo._height = 20;
			btUndo._width = 20;
			btY._x = _width-70;
			btY._y = 4.5;
			btY._height = 20;
			btY._width = 20;
			//
			btM._x = _width-47;
			btM._y = 4.3;
			btM._height = 20;
			btM._width = 20;
			//
			btN._x = _width-24;
			btN._y = 4.5;
			btN._height = 20;
			btN._width = 20;
			//
			//
			mask._width = Stage.width;
			mask._height = Stage.height-49;
			mask._x = 0;
			mask._y = 25;
			mask.duplicateMovieClip("mask"+i, i+10000);
			mask._visible = false;
			eval("sms"+i).setMask(eval("mask"+i));
		}
	}
	_root.smsUncheckedArray.length = 0;
	trace("Массив объектов после обнуления: "+_root.smsUncheckedArray);
	this.st_hide_uncheked.text = ("В очереди: "+_root.M.length+" смс");
}

И то, что даёт трэйс:

root.smsUncheckedArray: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
i=4
g=0
до _level16394.sms0,_level16394.sms1,_level16394.sms2,_level16394.sms3
после создания смс _level16394.sms0,,_level16394.sms2,_level16394.sms3
после подсоединения:_level16394.sms0,,_level16394.sms2,_level16394.sms3,_level16394.sms4

Старый 15.09.2006, 14:24
TEHb вне форума Посмотреть профиль Отправить личное сообщение для TEHb Посетить домашнюю страницу TEHb Найти все сообщения от TEHb
  № 2  
Ответить с цитированием
TEHb
[++1.1 19.09.06]
 
Аватар для TEHb

Регистрация: Mar 2000
Адрес: Moscow
Сообщений: 206

Я не претендую на звание гуру, но так писать код нельзя!

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


Код:
function draw_sms() {
	trace("_root.smsUncheckedArray: "+_root.smsUncheckedArray);
	var mArray:Array =_root.M
	for (var g:Number = 0; g<_root.smsUncheckedArray.length; g++) {
		var nextObjId:Number = mArray.length;
		var mName:String = "sms"+nextObjId
		var newMovie:MovieClip = _root.createEmptyMovieClip(movieName, _root.getNextHighestDepth() );
		mArray.push(newMovie)
		newMovie._x = 2;
		with (newMovie) {
			newMovie.id = _root.smsUncheckedArray[g].id;
			T1 = "Дата: "+_root.smsUncheckedArray[g].date+"\nНик: "+_root.smsUncheckedArray[g].nick+"\nНомер: "+_root.smsUncheckedArray[g].subno;
			T2 = _root.smsUncheckedArray[g].text;
			T = T1+T2;
			var metrics1:Object = my_fmt.getTextExtent(T1, sms_w);
			var metrics2:Object = my_fmt.getTextExtent(T2, sms_w);
			createTextField("my_txt", i+700, 0, 0, sms_w, metrics1.textFieldHeight+1);
			//////////trace("высота шапки "+metrics1.textFieldHeight+1);
			createTextField("my_txt1", i+900, 0, metrics1.textFieldHeight+1, sms_w, metrics2.textFieldHeight+1);
			//////////trace("высота текста "+metrics2.textFieldHeight+1);
			my_txt.visible = true;
			my_txt.multiline = true;
			my_txt.wordWrap = true;
			my_txt.type = "dynamic";
			my_txt.border = true;
			my_txt.text = html;
			my_txt.htmlText = T1;
			my_txt1.visible = true;
			my_txt1.multiline = true;
			my_txt1.wordWrap = true;
			my_txt1.type = "dynamic";
			my_txt1.border = true;
			my_txt1.background = true;
			my_txt1.backgroundColor = 0xF9F8F2;
			my_txt1.text = html;
			my_txt1.htmlText = T2;
			// 
			if (i == 0) {
				newMovie._y = 25;
			} else {
				var prvMovie:MovieClip = mArray[nextObjId-1]
				newMovie._y = prvMovie._y+prvMovie._height+2;
			}
			eval("my_txt").setTextFormat(my_fmt);
			eval("my_txt1").setTextFormat(my_fmt);
			attachMovie("btM", "btM", 100+this.getNextHighestDepth());
			attachMovie("btY", "btY", 200+this.getNextHighestDepth());
			attachMovie("btN", "btN", this.getNextHighestDepth());
			attachMovie("btOK", "btOK", 300+this.getNextHighestDepth());
			attachMovie("btUndo", "btUndo", 755+this.getNextHighestDepth());
			btOK.enabled = false;
			btOK._visible = false;
			btUndo.enabled = false;
			btUndo._visible = false;
			btOK._x = _width-45;
			btOK._y = 4.5;
			btOK._height = 20;
			btOK._width = 20;
			btUndo._x = _width-23;
			btUndo._y = 4.5;
			btUndo._height = 20;
			btUndo._width = 20;
			btY._x = _width-70;
			btY._y = 4.5;
			btY._height = 20;
			btY._width = 20;
			//
			btM._x = _width-47;
			btM._y = 4.3;
			btM._height = 20;
			btM._width = 20;
			//
			btN._x = _width-24;
			btN._y = 4.5;
			btN._height = 20;
			btN._width = 20;
			//
			//
			mask._width = Stage.width;
			mask._height = Stage.height-49;
			mask._x = 0;
			mask._y = 25;
			mask.duplicateMovieClip("mask"+nextObjId, nextObjId+10000);
			mask._visible = false;
			newMovie.setMask(eval("mask"+nextObjId));
		}
	}
	_root.M = mArray
	_root.smsUncheckedArray= new Array();
	this.st_hide_uncheked.text = ("В очереди: "+_root.M.length+" смс");
}
В коде, возможно, что-то пропустил или опечатался, проверяйте….

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

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

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


 


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


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