Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   и снова массив мувиков: нужен совет (http://www.flasher.ru/forum/showthread.php?t=85099)

Ulya 15.09.2006 13:20

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

Есть массив объектов с набором полей. Из каждого элемента массива создается мувик и присоединяется к массиву мувиков. Массив объектов изменяется во времени. То есть, если массив содержит 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

TEHb 15.09.2006 14:24

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

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


Код:

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, время: 03:45.

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