![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 3
|
Ошибка проявляется не на всех компах. Проект уже надо сдавать, а тут такая неприятность вскрылась (
Загружаю данные в массив из БД через XML. С загрузкой никаких трабл. Затем вызывается функция в которой есть вот такой блок сравнения массивов for(var i:Number = 0; i <= (glb_masObject.length-1) ; i++) //проход по новому массиву объектов
{
glb_masObject[i].RepeatAnimation = true; //по умолчанию требуется анимация движения
for(var j:Number = 0; j <= (glb_masPrevObject.length-1); j++) //проход по предыдущему(старому) массиву объектов
{
if (glb_masObject[i].IdTransport == glb_masPrevObject[j].IdTransport &&
glb_masObject[i].TimeTrackSource == glb_masPrevObject[j].TimeTrackSource &&
glb_masObject[i].TimeTrackDest == glb_masPrevObject[j].TimeTrackDest)
{ trace(i);
glb_masObject[i].RepeatAnimation = false; //не требуется анимация
break;
}
}
}
То есть если в массиве glb_masObject 1800, из цикла на значение 1328 вылет сообщения. Пытался бороться через setInterval, но не устраивает его работа, даже если беру не по одному значению, а порциями по 100-300 значений,то жутко все тормозит и прорисовка уже отточенных элементов не дает желаемых результатов. Есть ли способ побороть это "малой кровью" ? Есть ли какой-то способ заставить Player пройти до конца цикла, не останавливая его работу? Повторюсь все работает прекрасно, когда данных по индексу в массиве менее 500значений. PS: Флеш в одном кадре, тысяча строк кода, swf 155Kb, 800*600. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Скорее всего glb_masPrevObject иногда оказывается неопределенным и весь вложенный цикл становится бесконечным. Или внешний, не суть.
Ошибка в парсинге, совершенно точно. з.Ы. Ужасный код. |
|
|||||
|
Регистрация: Sep 2007
Сообщений: 3
|
Цитата:
function compareArray() { //Сравнение старых и новых подкаченных данных и определение тех миксеровозов
//для которых не требуется повторной анимации движения
if (glb_debug == true) trace( "Beg compareArray()" );
if (glb_masPrevObject != undefined && glb_masObject != undefined)
{
//Объект в одно время, может находится только в одной точке
for(var i:Number = 0; i <= (glb_masObject.length-1) ; i++)
{
glb_masObject[i].RepeatAnimation = true;
for(var j:Number = 0; j <= (glb_masPrevObject.length-1); j++)
{
if (glb_masObject[i].IdTransport == glb_masPrevObject[j].IdTransport &&
glb_masObject[i].TimeTrackSource == glb_masPrevObject[j].TimeTrackSource &&
glb_masObject[i].TimeTrackDest == glb_masPrevObject[j].TimeTrackDest)
{
glb_masObject[i].RepeatAnimation = false; //не требуется анимация
break;
}
}
}
}
if (glb_debug == true) trace( "End compareArray()" );
}
Цитата:
Вот парсер, убрал только код по созданию объектов и событий к ним var mixers_lv:LoadVars = new LoadVars();
mixers_lv.onData = function(srs:String) { //Загрузка инф-ции из БД, о прохождении миксера через считыватели, через XML файл
var isFound:Boolean;
if (glb_debug == true) trace( "Beg mixers_lv.onData" );
//иницилизация глобальных переменных
glb_flagLoaded = false;
glb_masObject = null;
glb_masObject = new Array();
glb_oldText = ""
glb_NameMC = null;
glb_NameMC = new Array;
if (srs != undefined)
{
var rootXML:XML = new XML();
rootXML.parseXML(unescape(srs));
for (var i = 0; i < rootXML.firstChild.childNodes.length; i++)
{
var TrackingXML = rootXML.firstChild.childNodes[i];
var points = new Array();
for (var j = 0; j < TrackingXML.childNodes.length; j++)
{
points.push( {NamePoint: TrackingXML.childNodes[j].attributes.NamePoint,
orderMove: TrackingXML.childNodes[j].attributes.orderMove,
X: _level0[TrackingXML.childNodes[j].attributes.NamePoint]._x,
Y: _level0[TrackingXML.childNodes[j].attributes.NamePoint]._y
}
)
}
glb_masObject.push( {
nRec: i,
RepeatAnimation: true,
IdTransport: TrackingXML.attributes.IdTransport,
TimeTrackSource: TrackingXML.attributes.TimeTrackSource,
IdSource: TrackingXML.attributes.IdSource,
TimeTrackDest: TrackingXML.attributes.TimeTrackDest,
IdDest: TrackingXML.attributes.IdDest,
car: TrackingXML.attributes.car,
points: points
}
)
...........................
...........................
dataGridHistory.dataProvider = glb_masObject;
//Сравнение старых и новых подкаченных данных и определение тех миксеровозов для которых не требуется повторной анимации движения
compareArray();
glb_n = 0;
glb_flagLoaded = true;
return true;
}
else
{
clearInterval(intervalId); //Сброс таймера перемещения миксеровозов
intervalId = null;
if (glb_debug == true)
{
trace("Нет данных о перемещениях миксеровозов!");
lstDebug.addItem("Нет данных о перемещениях миксеровозов!");
}
return false;
}
if (glb_debug == true) trace( "End mixers_lv.onData" );
}
XML файл приходит полным mixers_lv.load(http_root+"m.ashx?db='"+glb_str_db+"'&de='"+glb_str_de+"'×tamp=" + DateUTCInSQLStr(timestamp) ); Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 12:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|