![]() |
|
||||||||||
|
|||||
|
Уважаемые гуру флэша.
Я тут уже всю голову сломала, что не так. Подскажите. Есть массив объектов с набором полей. Из каждого элемента массива создается мувик и присоединяется к массиву мувиков. Массив объектов изменяется во времени. То есть, если массив содержит 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 |
|
|||||
|
[++1.1 19.09.06]
Регистрация: 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|