AS2: оператор «If», вызывающий вечный цикл - PullRequest
0 голосов
/ 03 июня 2011

Я использую следующий код ...

var Graphs:Array = new Array(contentMain.graph1, contentMain.graph2, contentMain.graph3, contentMain.graph4, contentMain.graph5, contentMain.graph6, contentMain.graph7, contentMain.graph8, contentMain.graph9);
trace(Graphs);
function dateToString(date:Number) {
    var Days:Array = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
    var Months:Array = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
    var current_date = new Date(date);
    var day_num = current_date.getDay();
    var year = current_date.getFullYear();
    var month = current_date.getMonth();
    var date_num:String = new String(current_date.getDate());
    date_char = date_num.charAt(date_num.length-1);
    if (date_char == 1) {
        date_suffix = "st";
    } else if (date_char == 2) {
        date_suffix = "nd";
    } else if (date_char == 3) {
        date_suffix = "rd";
    }
    var date_string:String = new String(Days[day_num]+" "+date_num+date_suffix+" of "+Months[month]+" "+year);
    return date_string;
}

var local_data = SharedObject.getLocal("user_data");
Slide_Tracker = local_data.data.user_data;
for (i=0; i<Slide_Tracker.length; i++) {
    var current_date:Date = new Date(Slide_Tracker[i].date_int);
    var date_string:String = dateToString(Slide_Tracker[i].date_int);
    if (i=0) {
        for (s=0; s<Slide_Tracker[i].val_arr.length; s++) {
            Graphs[s].createEmptyMovieClip("chart",10);
            Graphs[s].chart._x = 0;
            Graphs[s].chart._y = 37.9;
        }
    } else if (i>0) {
        var past_date:Date = new Date(Slide_Tracker[i-1].date_int);
        var date_diff:Number = Math.round((current_date-past_date)/86400000);
    }
    for (s=0; s<Slide_Tracker[i].val_arr.length; s++) {

    }
}

проблемный код выглядит следующим образом:

if (i=0) {
            for (s=0; s<Slide_Tracker[i].val_arr.length; s++) {
                Graphs[s].createEmptyMovieClip("chart",10);
                Graphs[s].chart._x = 0;
                Graphs[s].chart._y = 37.9;
            }

Хотя это, если оператор существует (даже если он пуст), он вызывает вечныйцикл, и появляется сообщение «скрипт заставляет этот фильм работать медленно».

Может кто-нибудь сказать мне, почему это происходит?

Ответы [ 2 ]

2 голосов
/ 03 июня 2011

Я думаю, что вы хотели if (i==0), потому что это просто устанавливает i в 0 и всегда возвращает true?

0 голосов
/ 03 июня 2011

Проблема в том, что «i» всегда будет равняться нулю, поскольку оно не установлено на что-либо еще, s - это значение, которое вы повышаете

Внутри, если просто положить:

i = 1;

или что вы хотите установить. В качестве альтернативы

if (i==0 && s==0) {

(я думаю, именно так вы делаете 'и' в ActionScript.)

...